我有一個相當大的項目文件結構,我需要轉換成多平臺cmake項目。現在它接近cmake需要永遠單個cpp文件單獨添加到可執行文件。但有沒有一個腳本可以自動執行此操作?那通過文件結構窺探,並且只是自動添加每個源文件?由於該項目可能會獲得更多的源文件,我可能無法手動添加每一個。CMake遞歸地將目錄的所有子目錄內的所有源文件添加到可執行文件?
0
A
回答
0
你可以使用execute_process()
與cmake -P
腳本,它使用通配符遞歸掃描其寫入一個文件包含在你的CMakeLists.txt
即像源文件:
「的CMakeLists.txt」:
execute_process(COMMAND ${CMAKE_COMMAND}
-D "RDIR=${CMAKE_CURRENT_SOURCE_DIR}"
-P "scansources.cmake"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
include("sources.cmake")
add_executable(myexe ${sources})
「scansources.cmake」(產生 「sources.cmake」):
file(GLOB_RECURSE sourcelist
*.c
*.cc
*.cpp
*.cxx)
string(REGEX REPLACE "${RDIR}/" "" relative_sources "${sourcelist}")
string(REPLACE ";" "\n" sources_string "${relative_sources}")
set(sources_string "set(sources\n${sources_string})")
file(WRITE sources.cmake "${sources_string}")
之所以這樣,工程是因爲execute_process()
發生在配置時間。
您當然可以通過其他工具或IDE生成sources.cmake
,那麼您不需要scansources.cmake
或execute_process()
。
+0
所以基本上建立一個腳本,每次我想要編譯我的程序,然後make -j4執行cmake,然後重新掃描這些文件。我知道,cmake不會自動搜索它們,如果你只是自己重新創建,對源文件進行匹配,但這實際上可以解決這個問題,謝謝 – user1510024
相關問題
- 1. 保持目錄和所有子目錄遞歸除了文件
- 2. 遞歸地擴展到當前目錄中的所有文件?
- 3. 遞歸遍歷目錄及其子目錄中的所有文件Qt
- 4. 列出目錄+子目錄中的所有文件和目錄
- 5. 如何遞歸地只有一個文件的所有子目錄
- 6. 301將目錄內的所有文件重定向到目錄根目錄
- 7. 遞歸地比較目錄,忽略所有二進制文件:
- 8. 將所有文件打包到目錄
- 9. TCL:遞歸搜索子目錄以獲取所有.tcl文件
- 10. 如何遞歸遍歷所有子目錄並讀取文件?
- 11. 遞歸查找目錄中的所有文本文件
- 12. JavaFX - 如何將目錄中的所有文件添加到TableView
- 13. 如何將目錄中的所有新文件添加到CVS
- 14. 傳遞exe文件到目錄中的所有文件到Python
- 15. 目錄中所有文件的行數
- 16. 獲取目錄中的所有文件和所有文件的所有子目錄下
- 17. Bash/Shell-將子目錄中的所有文件移動到目標目錄中?
- 18. SYMLINK到目錄中的所有文件
- 19. 將組「Everyone」添加到目錄及其所有子目錄
- 20. .htaccess - 將子目錄添加到所有目錄
- 21. 如何添加一個遞歸循環來刪除一個包含所有子目錄和文件的目錄?
- 22. PHP刪除的目錄都是空的所有文件和所有子目錄
- 23. 遞歸從子目錄將文件移動到文件夾中的父目錄
- 24. 如何通過nodegit將目錄或所有文件添加到目錄中?
- 25. 如何添加一個目錄內的所有.pri文件
- 26. 將文件名的列添加到目錄中的所有文件中
- 27. 獲取目錄中所有文件的列表(遞歸)
- 28. 在遞歸下編譯目錄下的所有cpp文件
- 29. 使用遞歸獲取某個目錄中的所有文件
- 30. 獲取所有目錄中的文件遞歸提交
'file(GLOB ...)'是你的朋友。 – arrowd
謝謝,我會研究它 – user1510024
Unfortunatley他們在維基中明確聲明它不應該用於搜索源文件,因爲如果沒有cmake文件發生更改,cmake不會重新生成makefiles。但我可能會這樣做,並創建一個shell腳本,強制cmake每次向項目中添加一個文件時重建。感謝您的幫助 – user1510024