CMake的列表本质上只是由分号分隔的字符串,但如果您将这样的变量传递给一个命令,它会被扩展为多个参数 - 例如:
set(FLAGS f1 f2 f3)
# now FLAGS == 'f1;f2;f3'
add_custom_command(
...
COMMAND my_cmd ${FLAGS}
...
)
将正确调用my_cmd f1 f2 f3
。
现在,如果我使用以下方式:
set_target_properties(
myTarget PROPERTIES
LINK_FLAGS "${LD_FLAGS}"
)
扩展并没有发生,结果我只得到了一个包含分号的单个LD_FLAG
,毫无用处,而不是将其扩展为一个以空格分隔的字符串。
是否有办法使得当我将列表传递给LINK_FLAGS属性(或任何其他属性)时,它可以被扩展为多个参数,而不仅仅是一个?
set_target_properties
命令的列表格式? - David Graysonstring(REPLACE ";" " " DEST ${SRC})
将分号替换为…一个空字符串。只有这个可以工作:foreach(OPT ${LD_FLAGS}) set(LINK_FLAGS "${LINK_FLAGS} ${OPT}") endforeach()
。如果这种c+++p(指编译器)不是今天最流行的构建工具,那就真的很有趣了。 - Ethourisstring (REPLACE ";" " " DEST "${SRC}")
是有效的;你好像忘了在最后一个参数周围加上引号。也许那些“+”妨碍了你。 - Angew is no longer proud of SO${SRC}
里面包含了分号;
,并且以这种形式在调用时进行了扩展(所以替换甚至没有机会生效)。至少值得记住的是,CMake 重复了和 Bash、Perl 相同的愚蠢错误。 - Ethouris