2017-06-14 33 views
0

我有以下結構:如何將CMake的add_dependency用於非子目錄?

${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) 

是使用包括導入其他cmake的項目的唯一途徑?

我不喜歡我需要我包含的絕對路徑target.cmake 用CMake解決我的用例的最佳實踐是什麼?

+1

的可能的複製[CMake的:?如何設置源,圖書館的CMakeLists.txt依賴性(https://stackoverflow.com/questions/31512485/cmake-how-to-setup-source-library-and-cmakelists-txt-dependencies) – Florian

回答

1

您應該使用add_subdirectory函數。

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

您可以添加不使用相對路徑子目錄的目錄。

例如,如果要添加同級目錄,

add_subdirectory(../dir) 

只要保證你在函數放在目錄下有一個CMakeLists.txt,這將導入項目到當前一個。

+0

我想,但它不是子目錄...它不起作用。 – Tarion

+0

@Tarion我編輯說明你可以添加一個不是子目錄的目錄。 – snoopy

+0

感謝欣。出於某種原因,我喜歡擁有絕對路徑。但是發現這很好:'add_subdirectory($ {ROOT}/project_b $ {ROOT}/pkg/project_b)'。 – Tarion