FetchContent 的 cmake 问题在 grpc 和 or-tools 之间具有相同的 protobuf 依赖性
cmake issue with FetchContent same protobuf dependency between grpc and or-tools
我正在使用 cmake 中的 FetchContent 来管理我的依赖关系
FetchContent_Declare(
protobuf
GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
GIT_TAG v3.13.0
SOURCE_SUBDIR cmake
)
## END PROTOBUF ##
## GRPC ##
FetchContent_Declare(
grpc
GIT_REPOSITORY https://github.com/grpc/grpc.git
GIT_TAG v1.33.x
GIT_PROGRESS TRUE
)
## END GRPC ##
## OR-TOOLS ##
FetchContent_Declare(
or-tools
GIT_REPOSITORY https://github.com/google/or-tools.git
GIT_TAG master
GIT_PROGRESS TRUE
PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/or-tools-protobuf.patch"
)
FetchContent_MakeAvailable(protobuf grpc or-tools)
问题是 or-tools 和 grpc 也在内部使用 protobuf FetchContent_Declare 所以 OR-TOOLS 抱怨 protobuf 已经存在
CMake Error at build/_deps/protobuf-src/cmake/libprotobuf-lite.cmake:64 (add_library):
add_library cannot create target "libprotobuf-lite" because another target
with the same name already exists. The existing target is a static library
created in source directory
"/Users/samuaz/Projects/itbit/securities-settlement/cpp/third_party/grpc-src/third_party/protobuf/cmake".
See documentation for policy CMP0002 for more details.
Call Stack (most recent call first):
build/_deps/protobuf-src/cmake/CMakeLists.txt:250 (include)
如果我尝试为 or-tools set(BUILD_Protobuf OFF) 禁用 protobuf,则找不到 or-tools 编译包 protobuf
-- No package 'protobuf' found
CMake Error at /Users/samuaz/Library/Application Support/JetBrains/Toolbox/apps/CLion/ch-0/202.6948.80/CLion.app/Contents/bin/cmake/mac/share/cmake-3.17/Modules/FindPkgConfig.cmake:497 (message):
A required package was not found
如何避免这个问题或使包 protobuf 从以前的 protobuf 可用 FetchContent_Declare?
谢谢!
交叉发布...
已在此处回答:https://github.com/google/or-tools/issues/2219
将deps.cmake(或稳定版 v8.0 上的 cpp.cmake)修改为
if(NOT BUILD_Protobuf AND NOT TARGET protobuf::libprotobuf)
find_package(Protobuf REQUIRED)
endif()
我正在使用 cmake 中的 FetchContent 来管理我的依赖关系
FetchContent_Declare(
protobuf
GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
GIT_TAG v3.13.0
SOURCE_SUBDIR cmake
)
## END PROTOBUF ##
## GRPC ##
FetchContent_Declare(
grpc
GIT_REPOSITORY https://github.com/grpc/grpc.git
GIT_TAG v1.33.x
GIT_PROGRESS TRUE
)
## END GRPC ##
## OR-TOOLS ##
FetchContent_Declare(
or-tools
GIT_REPOSITORY https://github.com/google/or-tools.git
GIT_TAG master
GIT_PROGRESS TRUE
PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/or-tools-protobuf.patch"
)
FetchContent_MakeAvailable(protobuf grpc or-tools)
问题是 or-tools 和 grpc 也在内部使用 protobuf FetchContent_Declare 所以 OR-TOOLS 抱怨 protobuf 已经存在
CMake Error at build/_deps/protobuf-src/cmake/libprotobuf-lite.cmake:64 (add_library):
add_library cannot create target "libprotobuf-lite" because another target
with the same name already exists. The existing target is a static library
created in source directory
"/Users/samuaz/Projects/itbit/securities-settlement/cpp/third_party/grpc-src/third_party/protobuf/cmake".
See documentation for policy CMP0002 for more details.
Call Stack (most recent call first):
build/_deps/protobuf-src/cmake/CMakeLists.txt:250 (include)
如果我尝试为 or-tools set(BUILD_Protobuf OFF) 禁用 protobuf,则找不到 or-tools 编译包 protobuf
-- No package 'protobuf' found
CMake Error at /Users/samuaz/Library/Application Support/JetBrains/Toolbox/apps/CLion/ch-0/202.6948.80/CLion.app/Contents/bin/cmake/mac/share/cmake-3.17/Modules/FindPkgConfig.cmake:497 (message):
A required package was not found
如何避免这个问题或使包 protobuf 从以前的 protobuf 可用 FetchContent_Declare?
谢谢!
交叉发布... 已在此处回答:https://github.com/google/or-tools/issues/2219
将deps.cmake(或稳定版 v8.0 上的 cpp.cmake)修改为
if(NOT BUILD_Protobuf AND NOT TARGET protobuf::libprotobuf)
find_package(Protobuf REQUIRED)
endif()