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

CMake如何实现类似Makefile的依赖变更触发自定义命令功能?

CMake实现依赖变更触发自定义命令的方案

你可以在模板空缺位置补充如下代码实现需求:

# 定义依赖变更触发的自定义规则
add_custom_command(
  # 此处用占位文件记录命令执行状态,若你自定义命令有实际输出文件可直接替换为输出文件路径
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/.custom_command_stamp
  # 此处填写所有需要监控变更的依赖文件
  DEPENDS
    if_this_file_changes.cpp
    if_this_file_changes.txt
  # 此处替换为你要执行的实际自定义命令,支持多条COMMAND顺序执行
  COMMAND run_some_command
  # 更新占位文件的修改时间,用于下一次构建的变更对比
  COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/.custom_command_stamp
  COMMENT "检测到依赖文件变更,执行自定义操作..."
)

# 声明自定义构建目标,加入默认构建流程
add_custom_target(
  run_custom_check ALL
  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.custom_command_stamp
)

# 绑定自定义目标到最终的hello可执行目标,保证依赖检查先于编译执行
add_dependencies(hello run_custom_check)

规则说明

  • 只要DEPENDS列表中任意一个文件的修改时间晚于占位文件的修改时间,就会自动执行你指定的COMMAND命令,无变更时不会重复执行
  • 如果你要执行的命令本身有固定的输出文件,可以直接把OUTPUT参数改为你的实际输出文件路径,同时删掉额外touch占位文件的COMMAND即可,逻辑更简洁
  • 用到的${CMAKE_COMMAND} -E touch是CMake内置的跨平台touch实现,不会依赖系统自带的命令工具,兼容性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 19:39:03