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

CMake中如何在其他目标中引用生成的可执行文件?

CMake中引用生成的可执行文件的正确方式

在CMake里引用生成的可执行文件,分两种场景处理最稳妥:

1. 处理add_executable生成的可执行文件

直接用生成器表达式$<TARGET_FILE:目标名称>就能拿到可执行文件的完整绝对路径,完全不用依赖系统PATH,CMake会自动处理不同平台的路径格式,还能保证该可执行文件先被构建完成。

示例代码:

# 定义生成器可执行目标
add_executable(MyGenerator generator.cpp)

# 用生成器生成C文件
add_custom_command(
  OUTPUT generated.c
  COMMAND $<TARGET_FILE:MyGenerator> --input input.txt --output generated.c
  MAIN_DEPENDENCY input.txt
  DEPENDS MyGenerator  # 显式依赖,确保MyGenerator先构建
)

2. 处理add_custom_target生成的可执行文件

这种场景没有现成的生成器表达式可用,需要手动指定可执行文件的绝对输出路径,同时在后续命令中引用这个路径,并添加正确的依赖关系:

示例代码:

# 明确指定生成的可执行文件的绝对路径
set(MY_GENERATED_TOOL ${CMAKE_CURRENT_BINARY_DIR}/MyGeneratedTool)

# 自定义目标生成可执行文件
add_custom_target(MyName
  COMMAND whatever --output ${MY_GENERATED_TOOL}
  COMMAND it
  COMMAND takes
  VERBATIM
  DEPENDS some/file also/some/other/file
)

# 使用生成的工具生成C文件
add_custom_command(
  OUTPUT generated.c
  COMMAND ${MY_GENERATED_TOOL} --input input.txt --output generated.c
  MAIN_DEPENDENCY input.txt
  DEPENDS MyName  # 确保生成工具先完成构建
)

核心注意点

  • 优先用add_executable定义生成器目标,生成器表达式的方式最可靠,能避免路径和依赖的各种问题;
  • 如果必须用add_custom_target生成工具,一定要用绝对路径(比如结合CMAKE_CURRENT_BINARY_DIR),不要用相对路径,防止构建时找不到文件;
  • 所有依赖必须显式声明,CMake不会自动推断这种自定义目标的依赖关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:57:42