You need to enable JavaScript to run this app. 如何将批量生成可执行文件的逻辑从make all移除并设为独立CMake目标
优惠活动
大模型
产品
解决方案
定价
更多

如何将批量生成可执行文件的逻辑从make all移除并设为独立CMake目标

CMake 从默认构建中剥离示例程序、实现独立examples构建目标的方案

核心实现逻辑

搭配两个CMake原生能力即可落地需求:

  • 给单个编译生成的示例可执行文件加EXCLUDE_FROM_ALL标记,让这类目标不被默认的all构建流程收录。
  • 新建一个独立的自定义总目标examples,把所有单个示例可执行文件作为它的依赖,只有显式触发这个目标的构建时,才会连带编译所有关联的示例程序。

可直接使用的CMake代码

# 创建独立的 examples 总目标,不加 ALL 参数,保证自身也不纳入默认构建
add_custom_target(examples)

foreach (FILE ${EXAMPLE_FILES})
    # 从源文件路径提取不带后缀的文件名,作为每个示例的唯一可执行文件名,避免目标重名
    get_filename_component(EXAMPLE_TARGET_NAME ${FILE} NAME_WE)
    # 添加带 EXCLUDE_FROM_ALL 标记的可执行目标,默认不随 make all 构建
    add_executable(${EXAMPLE_TARGET_NAME} EXCLUDE_FROM_ALL ${FILE})
    # 将单个示例目标绑定为 examples 总目标的依赖
    add_dependencies(examples ${EXAMPLE_TARGET_NAME})
endforeach ()

实际效果

  • 执行cmake .. && make时,CMake会正常编译项目主程序,完全跳过所有示例源文件的编译流程,不会生成任何示例可执行文件。
  • 执行make examples时,会自动遍历编译EXAMPLE_FILES列表中的所有cpp文件,为每个文件生成对应的独立可执行文件。
  • 这套逻辑对多生成器(Make、Ninja、VS、Xcode)均兼容,IDE场景下会自动在项目中生成名为examples的独立目标分组,默认构建不会触发组内文件编译。

补充说明:原始示例代码中循环内所有可执行文件都使用同一个${TARGET_NAME}是简化写法,实际CMake要求每个构建目标必须有唯一名称,否则会触发重定义报错,因此实现时需要为每个源文件匹配独立的可执行文件名。


内容的提问来源于stack exchange,提问作者vsoftco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.07 12:06:03