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

CMake BOOL生成器表达式将空列表评估为true的问题

关于CMake自定义目标中生成器表达式列表空值判断的问题

我尝试在CMake构建中添加自定义命令目标,基于包含生成器表达式的变量追加参数列表,原始代码如下:

list(
  APPEND MY_INCLUDE_DIRECTORIES
    $<TARGET_PROPERTY:target,INCLUDE_DIRECTORIES>
    $<TARGET_PROPERTY:target,INTERFACE_INCLUDE_DIRECTORIES>
)

add_custom_target(
  custom_target
  COMMAND binary
    "$<$<BOOL:$<GENEX_EVAL:${MY_INCLUDE_DIRECTORIES}>>:--includes;$<JOIN:${MY_INCLUDE_DIRECTORIES},;--includes;>>"
  COMMAND_EXPAND_LISTS
  VERBATIM
)

但实际运行时,当MY_INCLUDE_DIRECTORIES评估为空列表时,仍会执行binary --includes。为了排查问题,我修改代码进行调试:

add_custom_target(
  custom_target
  COMMAND binary 
    "$<BOOL:$<GENEX_EVAL:${MY_INCLUDE_DIRECTORIES}>>"
    "$<GENEX_EVAL:${MY_INCLUDE_DIRECTORIES}>"
  COMMAND_EXPAND_LISTS
  VERBATIM
)

调试结果输出binary 1,这说明BOOL表达式评估为true,但实际列表是空的——我是否在操作上有误?


编辑:我已经找到修复方法,但仍不理解原因,修改后的代码如下:

list(
  APPEND MY_INCLUDE_DIRECTORIES
    "$<TARGET_PROPERTY:target,INCLUDE_DIRECTORIES>$<TARGET_PROPERTY:target,INTERFACE_INCLUDE_DIRECTORIES>"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:34