You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake如何创建带输出的命名自定义目标,输出存在时不触发重新构建

CMake 自定义增量构建目标实现方案

你需要的效果可以通过add_custom_command + add_custom_target组合实现,两个接口搭配刚好能同时满足「增量构建判断」和「存在可调用目标」的要求,无需用到编译相关的接口。

具体实现步骤

  • 第一步:调用add_custom_command声明生成规则,明确指定OUTPUT参数为你要生成的文件路径,DEPENDS参数为所有依赖的输入文件,再填写实际要执行的命令。这一步CMake会自动维护时间戳比对逻辑,只要所有依赖的修改时间都早于输出文件,就不会重新执行命令。
  • 第二步:调用add_custom_target创建你需要的命名目标,通过DEPENDS参数关联到上一步add_custom_command中声明的输出文件,即可将生成规则绑定为可手动触发、也可被其他目标依赖的正式构建目标。

代码示例

# 示例场景:用python脚本处理源数据生成二进制产物,目标命名为process_data
add_custom_command(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/output.bin
  DEPENDS 
    ${CMAKE_CURRENT_SOURCE_DIR}/input.raw
    ${CMAKE_CURRENT_SOURCE_DIR}/process.py
  COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/process.py
    ${CMAKE_CURRENT_SOURCE_DIR}/input.raw
    ${CMAKE_CURRENT_BINARY_DIR}/output.bin
  COMMENT "Processing raw data..."
)

add_custom_target(
  process_data
  # 若需要该目标随默认构建自动执行,保留ALL参数,不需要可删除
  ALL
  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output.bin
)

注意事项

  • 必须保证add_custom_command的OUTPUT路径和add_custom_target的DEPENDS路径完全一致,推荐使用CMAKE_CURRENT_SOURCE_DIR、CMAKE_CURRENT_BINARY_DIR等内置变量明确路径,避免相对路径导致的关联失效问题。
  • 如果你的目标没有实际生成的物理文件,可以生成一个标记文件(比如.process_data.stamp)作为OUTPUT,命令执行完成后触摸这个文件即可,同样能实现增量构建判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:48:03