我有一个非常大的项目文件结构,我需要将其转换为多平台cmake项目。现在它接口cmake要求将单个cpp文件单独添加到可执行文件中。但是有脚本可以自动执行此操作吗?窥探文件结构并自动添加每个源文件?由于该项目可能会获得更多的源文件,我可能无法手动添加每一个。
答案 0 :(得分:1)
您可以将execute_process()
与cmake -P
脚本一起使用,以使用globbing来递归扫描源文件,该文件会写入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()
。