管理cmake依赖git模块

时间:2018-12-19 02:31:59

标签: c++ cmake git-submodules

我正在尝试为我的一个库设置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)

1 个答案:

答案 0 :(得分:0)

您可以通过在主CMakeLists.txt顶部附近添加以下行来禁用对当前项目的重复名称的检查:

cmake_policy(SET CMP0002 OLD)

禁用这些检查可能会给您带来其他问题,但这可能只是您需要的解决方法。