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

CMake如何为自定义目标设置TARGET_FILE生成表达式

CMake自定义目标设置TARGET_FILE生成器表达式的实现方法

首先说明直接设置LOCATION属性不生效的原因:LOCATION是CMake的只读目标属性,仅add_executable、add_library等内置方法生成的非导入目标会由CMake自动赋值,用户无法手动修改该属性让$<TARGET_FILE>生成器表达式生效。

你可以根据你的使用场景选择以下两种实现方案:

场景1:自定义目标对应实际生成的输出文件

这是最常见的使用场景,你需要先绑定自定义目标和输出文件,再设置对应属性即可:

# 1. 定义生成目标文件的自定义命令
add_custom_command(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/my_generated_file
  COMMAND # 这里填写你生成文件的对应命令,如打包、自定义编译指令等
  DEPENDS # 这里填写生成文件依赖的前置文件/目标
)

# 2. 定义自定义目标,绑定上面的输出文件
add_custom_target(my_target
  ALL
  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/my_generated_file
)

# 3. 设置目标属性让TARGET_FILE生成器表达式生效
set_target_properties(my_target PROPERTIES
  # 根据你生成的文件类型设置TYPE,可选值包括EXECUTABLE/STATIC_LIBRARY/SHARED_LIBRARY等
  TYPE EXECUTABLE
  # 单配置场景直接填IMPORTED_LOCATION,多配置场景可以加_<CONFIG>后缀区分不同配置的路径
  IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/my_generated_file
)

设置完成后,$<TARGET_FILE:my_target>就会正常返回你指定的输出文件路径。

场景2:仅需要自定义TARGET_FILE返回值,无实际生成文件

如果你的自定义目标不需要生成实际文件,只是要让$<TARGET_FILE:my_target>返回你指定的任意路径,可以直接将目标声明为导入目标:

add_custom_target(my_target)

set_target_properties(my_target PROPERTIES
  IMPORTED TRUE
  # 同样根据你的需要设置TYPE
  TYPE EXECUTABLE
  # 直接填你想要返回的任意路径
  IMPORTED_LOCATION "/your/custom/path/any.file"
)

该方案下即使你填写的路径不存在,生成器表达式也会正常返回你设置的路径值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:06:04