cmake在同一级别的两个项目之间的依赖关系

时间:2018-03-23 13:58:18

标签: cmake dependencies

在我的CMake项目中,我有两个第三方库是必需的。 问题是第二个需要首先构建第一个。

准确地说,我有以下结构

   -project
      CMakeLists.txt // add_subdirectory(first_lib)
                     // add_subdirectory(second_lib)
      - first_lib
           CMakeLists.txt // ...
      - second_lib
           CMakeLists.txt // ..
                          // contains find_package(first_lib REQUIRED)
                          // ..

此项目无法构建,因为必须首先构建第一个库并安装以使其包可用。

在CMake中处理此案例的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以使 second_lib 取决于 first_lib 的目标名称。这将强制首先构建 first_lib

为避免修改 second_lib 的CMakeLists.txt,您可以使用以下解决方案:

创建自定义Findfirst_lib.cmake模块。设置模块内 second_lib 所需的任何 first_lib 相关变量。

set(FIRST_LIB_LIBRARIES first_lib) #use *first_lib* target name here.
set(FIRST_LIB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/first_lib/include)

不要忘记将模块的目录添加到CMAKE_MODULE_PATH

此解决方案假定 second_lib 使用由Findfist_lib模块设置的变量,在target_link_libraries,target_include_directories等中。例如:

target_link_libraries(second_lib ${FIRST_LIB_LIBRARIES})

我还没有办法让它适用于导入的目标。

答案 1 :(得分:0)