gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:35 27 4
gpt4 key购买 nike

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

最佳答案

您可以将 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().

关于linux - CMake递归地将目录的所有子目录中的所有源文件添加到可执行文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45586720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com