首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用cmake编译多个源文件并生成以这些文件名命名的多个可执行文件。

如何使用cmake编译多个源文件并生成以这些文件名命名的多个可执行文件。
EN

Stack Overflow用户
提问于 2020-08-15 02:12:00
回答 1查看 1.2K关注 0票数 1

目前,我需要帮助创建一个CMakeList.txt,或者简单地计算出下面的cmake命令。

我在同一个目录中有一些源文件,名为A.cppB.cppC.cppD.cpp。我需要编译这些文件,以便将可执行文件分别命名为A、B、C、D。

我希望使用CMake自动遍历目录并生成相应的可执行文件,而不是每次添加文件时都在CMakeList.txt中添加相应的可执行文件。

EN

Stack Overflow用户

回答已采纳

发布于 2020-08-15 02:43:22

这要求有点奇怪。通常,我建议在需要的地方手动编写add_executable,因为它更易于维护。

在CMake中,没有一种很好的方法来收集目录中的所有文件。您可以使用file(GLOB ...)获取所有文件;但这在配置时完成,如果引入新源,CMake将不会检测到新源,也不会自动重新配置或构建新源,而不会显式地被告知要重新配置。

如果您能够谨慎地列出每个源,则会更好。但是,否则,您所请求的内容可以通过一个foreach组合通过每个源文件,使用get_filename_component获取文件名并将其传递给add_executable

代码语言:javascript
复制
set(source_files src/a.cpp src/b.cpp src/c.cpp ...)

# Loop through each source file
foreach(source_file IN LISTS source_files)
    # Get the name of the file without the extension (e.g. 'a' from src/a.cpp'
    get_filename_component(target_name ${source_file} NAME_WE)
    
    # Create an executable with the above name, building the above source
    add_executable("${target_name}" "${source_file}"
endforeach()

如果不可能单独列出源文件,则可以使用file(GLOB...) or file(GLOB_RECURSE)

代码语言:javascript
复制
file(GLOB source_files "src/*.cpp")

但是,这会防止在添加新源时自动检测,我不建议这样做。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63421949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档