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

如何配置CMake使add_custom_command每次执行make命令时都触发运行

问题根因

你当前使用的POST_BUILD类型自定义命令绑定在mainbin目标上,仅当mainbin本身需要重新构建(例如main.cxx有修改导致目标重新生成)时,才会触发后续的脚本执行逻辑。你修改script.sh后没有改动main.cxx,mainbin不需要重新构建,因此脚本不会运行。

解决方案

根据你的需求,有两种常用配置方式:

方案1:脚本修改自动触发执行

如果需要script.sh内容改动后自动运行脚本,只需将脚本添加为mainbin的依赖即可:

cmake_minimum_required(VERSION 3.21.1)
project(testdir)

# 用内置变量声明脚本路径,避免写死绝对路径
set(SCRIPT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/script.sh)

add_executable(mainbin main.cxx)
# 将脚本添加为mainbin的依赖
add_dependencies(mainbin ${SCRIPT_PATH})
set_source_files_properties(${SCRIPT_PATH} PROPERTIES GENERATED TRUE)

add_custom_command(TARGET mainbin
    POST_BUILD
    COMMAND /bin/sh ${SCRIPT_PATH}
    # 指定脚本执行的工作目录,按需修改为源码目录或构建目录
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

方案2:每次执行make都强制运行脚本

如果要求无论是否有文件改动,只要执行make就运行脚本,可以新增一个总是构建的自定义目标:

cmake_minimum_required(VERSION 3.21.1)
project(testdir)

set(SCRIPT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/script.sh)

add_executable(mainbin main.cxx)

# 声明总是运行的自定义目标
add_custom_target(run_script ALWAYS
    COMMAND /bin/sh ${SCRIPT_PATH}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
# 让mainbin依赖该目标,每次构建前都会先执行脚本
add_dependencies(mainbin run_script)
补充说明
  • 建议使用CMake内置路径变量代替硬编码的绝对路径,避免项目移动或环境变更后路径失效。
  • 可根据你的实际需求调整WORKING_DIRECTORY参数,指定脚本执行的工作目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:48:02