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
相关产品推荐
相关产品推荐

