我正在尝试为我的一个库设置cmake构建。假设我要库B取决于A。两个库都使用CMake作为构建系统。两者都通过git submodule
对gtest具有外部依赖性。
.
+-libA
|-CMakeLists.txt
|...
+-external/gtest
+-CMakeLists.txt
+-libB
|-CMakeLists.txt
|...
+-external/gtest
+-CMakeLists.txt
能够独立构建项目并作为较大项目的一部分的最佳项目结构是什么?
使用上述布局,我得到一个错误,认为gtest是由另一个项目定义的:
CMake Error at libstyxe/external/gtest/googletest/cmake/internal_utils.cmake:161 (add_library):
add_library cannot create target "gtest" because another target with the
same name already exists. The existing target is a static library created
in source directory
"libsolace/external/gtest/googletest". See
documentation for policy CMP0002 for more details.
我尝试过的选项: 1.使libA与libB / external链接,并通过add_directory包含它。 Builind libB失败,出现与上述错误类似的错误。 2.创建一个根CMakeLists.txt,将libA和libB都添加为add_subdirectory。 同样的问题。
libA / CMakeLists.txt和libB / CMakeLists.txt中的gtest包括:
add_subdirectory(external/gtest/googletest EXCLUDE_FROM_ALL)
答案 0 :(得分:0)
您可以通过在主CMakeLists.txt
顶部附近添加以下行来禁用对当前项目的重复名称的检查:
cmake_policy(SET CMP0002 OLD)
禁用这些检查可能会给您带来其他问题,但这可能只是您需要的解决方法。