我喜歡在多個subdirs結構我的代碼,但我不想在每個新的子目錄中創建一個新的cmakelist.txt。cmake使用一個cmakelist.txt爲一個項目與子目錄
我的文件夾結構是這樣的:
project
>cmakelist.txt
>build
>src
>main.cpp
>multiple_subdirs_or_(c|h)pp_files_with_more_subdirs_or_(c|h)pp_files
我cmakelist.txt看起來像這樣:執行後創建
源文件:
...
file(GLOB_RECURSE cpps RELATIVE ${CMAKE_CURRENT_LIST_DIR} "src/*.cpp")
file(GLOB_RECURSE hpps RELATIVE ${CMAKE_CURRENT_LIST_DIR} "src/*.hpp")
#remove files with main
list(REMOVE_ITEM cpps "src/test.cpp")
#bins
add_executable(test src/test.cpp src/test.cpp ${hpps} ${cpps})
#same problem if this is used instead of the other add_executable
add_library(foo OBJECT ${cpps} ${hpps})
add_executable(test src/test.cpp $<TARGET_OBJECTS:foo>)
與我的文件中的問題cmake沒有編譯,如果使用它們,構建失敗。 由http://www.cmake.org/cmake/help/v3.0/command/file.html在部分GLOB預測:
我們不建議使用GLOB收集源文件的列表,從 你的源代碼樹。如果在添加或刪除源 時沒有CMakeLists.txt文件更改,則生成的生成系統無法知道何時 要求CMake重新生成。
問題:是否可以使用單個cmakelist.txt用於具有多個子目錄的項目? (沒有文件(GLOB ...)的問題)
您可以運行目標'讓rebuild_cache'使CMake的運行再次通配符表達式,它會拿起新的文件 - 但別人的答案建議,最好手動列出的所有文件(這意味着你將不得不在CMakeLists.txt中添加新文件,當文件更改時,cmake會自動執行rebuild_cache)。 – 2014-11-01 11:23:36