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

CMake 生成器表达式中如何检查目标是否存在指定属性

CMake生成器表达式判断目标是否具备指定属性的方案

原生支持方案(CMake 3.19+)

CMake 3.19及更高版本已经原生提供了你需要的生成器表达式,用法完全符合你预期的形式:

$<TARGET_HAS_PROPERTY:tgt,property>

该表达式的返回规则非常明确:

  • 目标tgt存在指定property时返回1
  • 否则返回0

你可以直接和其他生成器表达式组合实现条件逻辑,示例用法如下:

# 仅当目标存在CUSTOM_COMPILE_FLAG属性时,才添加对应的编译定义
target_compile_definitions(app PRIVATE
  $<$<TARGET_HAS_PROPERTY:app,CUSTOM_COMPILE_FLAG>:-DUSE_CUSTOM_FLAG>
)

低版本兼容方案(CMake < 3.19)

如果你的项目需要兼容更低版本的CMake,且要判断的属性在配置阶段前期就已经完成设置、不会在配置后期动态修改,可以用配置期逻辑配合生成器表达式实现近似效果:

# 配置阶段先查询目标是否定义了对应属性
get_property(target_has_prop TARGET tgt PROPERTY property DEFINED)
# 转换为生成器可识别的布尔值
set(TGT_HAS_SPECIFIED_PROP $<BOOL:${target_has_prop}>)

后续可以直接用${TGT_HAS_SPECIFIED_PROP}替代原生表达式使用,注意该方案有局限性:如果属性是在get_property执行之后才设置到目标上的,判断结果会不准确,这种场景建议优先升级CMake版本使用原生实现。

注意事项

  • 所有方案中传入的tgt必须是已经通过add_executable、add_library等命令创建的合法目标,否则CMake会抛出配置错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:45:03