我試圖按照採取的方法here來調用CMake內現有的Makefile(建立一個靜態庫)。add_dependencies傳遞性與add_subdirectory
我的情況看起來如下目錄與一個Makefile內置
- 靜態庫
project/makefile_lib
- 通過CMake又建庫(
cmake_lib
)取決於makefile_lib
目錄project
- 的可執行文件,使用
cmake_lib
也在目錄project
我的CMakeLists.txt
在project
看起來如下。
project(cmake_makefile)
cmake_minimum_required(VERSION 2.8.12)
add_subdirectory(makefile_lib)
add_library(cmake_lib cmake_lib.c)
target_include_directories(cmake_lib
PRIVATE makefile_lib
)
target_link_libraries(cmake_lib makefile_lib)
add_executable(main main.c)
target_link_libraries(main cmake_lib)
而且在project/makefile_lib
add_custom_target(build_makefile_lib
ALL
COMMAND ${CMAKE_MAKE_PROGRAM}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "makefile_lib makefile"
)
add_library(makefile_lib STATIC IMPORTED)
set_target_properties(makefile_lib
PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/libmakefile_lib.a
)
add_dependencies(makefile_lib build_makefile_lib)
的CMakeLists.txt
按照add_dependencies
文檔:
依賴也會添加到導入的目標是在它的地方傳遞地執行了這個目標本身不建。
從project
目錄中我調用
mkdir build
cd build/
cmake ..
make
但Makefile文件project/makefile_lib
則永遠不會調用和構建失敗,cannot find -lmakefile-lib
。
有趣的是,如果我移動的project/makefile_lib
內容爲project
和頂級CMakeLists.txt
與project/makefile_lib/CMakeLists.txt
內容替換add_subdirectory
命令此方法效果。
爲什麼在這種情況下,add_dependencies
命令看起來並沒有傳遞?
區別在於,當你的代碼是根'CMakeLists的一部分。txt'表示'WORKING_DIRECTORY $ {CMAKE_CURRENT_SOURCE_DIR}'指向你的根目錄'project'。否則它指向'project/makefile_lib'。你確定你的'makefile'在子目錄嗎? – Florian