我有一个相当大的项目文件结构,我需要转换成多平台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