CMake递归地将目录的所有子目录中的所有源文件添加到可执行文件中?

时间:2017-08-09 09:28:20

标签: linux cmake

我有一个非常大的项目文件结构,我需要将其转换为多平台cmake项目。现在它接口cmake要求将单个cpp文件单独添加到可执行文件中。但是有脚本可以自动执行此操作吗?窥探文件结构并自动添加每个源文件?由于该项目可能会获得更多的源文件,我可能无法手动添加每一个。

1 个答案:

答案 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.cmakeexecute_process()