我有以下结构:
${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解决我的用例的最佳实践是什么?
答案 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" ...)