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

如何在不构建任何目标的情况下执行CMake自定义命令?

如何单独运行CMake中add_custom_command定义的命令

可以单独运行生成unit.cc的命令,无需构建依赖它的目标,下面是两种可行方案:

方案一:直接构建输出文件目标

CMake会为add_custom_command的OUTPUT项自动生成一个隐式目标,你可以直接指定这个输出文件作为构建目标来触发对应的命令:

在项目的build目录下执行:

cmake --build . --target unit.cc

这条命令只会运行生成unit.cc所需的步骤,不会触发任何依赖该文件的编译目标,完全跳过漫长的编译过程。

如果你的unit.cc不是在build根目录生成的(比如在子目录里),需要指定完整的相对路径,比如:

cmake --build . --target src/unit.cc

方案二:手动提取并执行命令

如果不想通过cmake --build触发,也可以直接提取add_custom_command里的命令,借助CMake来处理变量和生成器表达式后执行:

  1. 新建一个临时CMake脚本(比如run_merge.cmake),把add_custom_command里的逻辑移进去:
# 导入项目的CMake缓存变量(需在build目录下运行)
include(${CMAKE_CURRENT_LIST_DIR}/CMakeCache.txt)

# 执行源文件合并命令
execute_process(
  COMMAND cat ${ALL_SOURCE_FILES} > ${CMAKE_CURRENT_LIST_DIR}/unit.cc
  RESULT_VARIABLE CMD_EXIT_CODE
)

if(NOT CMD_EXIT_CODE EQUAL 0)
  message(FATAL_ERROR "合并源文件失败,退出码:${CMD_EXIT_CODE}")
endif()
  1. 在build目录下运行这个脚本:
cmake -P run_merge.cmake

这种方式适合你需要自定义命令执行逻辑的场景,但如果原命令里用到了复杂的生成器表达式(比如$<CONFIG>),方案一更省心——CMake会自动处理这些表达式,无需你手动解析。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:45:36