如何使用CMake的add_dependency到非子目录?

时间:2017-06-14 07:17:54

标签: c build cmake

我有以下结构:

${root}
    project_a
        main.c
        CMakeLists.txt
    project_b
        lib.c
        target.cmake

CMakeList.txt

include(${ROOT}/project_b/target.cmake)

add_executable(${PROJECT_NAME} main.c)
add_dependencies (${PROJECT_NAME} app_cmake_b)
target_link_libraries (${PROJECT_NAME} app_cmake_b)

target.cmake

add_library(project_b STATIC ${ROOT}/lib.c)

使用include是导入其他cmake项目的唯一方法吗?

我不喜欢我在我所包含的target.cmake中需要绝对路径 使用CMake解决我的用例的最佳实践是什么?

2 个答案:

答案 0 :(得分:1)

您应该使用add_subdirectory功能。

https://cmake.org/cmake/help/v3.0/command/add_subdirectory.html

您可以使用相对路径添加非子目录的目录。

例如,如果要添加兄弟目录,

 add_subdirectory(../dir)

只需确保您在函数中放置的目录具有CMakeLists.txt,并将该项目导入当前项目。

答案 1 :(得分:1)

此外,您可以使用ExternalProject模块 https://cmake.org/cmake/help/v3.7/module/ExternalProject.html

ExternalProject_Add(project_b SOURCE_DIR "path" BINARY_DIR "path" ...)