CMake的名单基本上只是分号分隔的字符串,但如果你通过这样一个变量的命令时,它得到扩展到多个参数 - 例如,如何正确地将标志的CMake列表(分号-sep)传递给set_target_properties?
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属性(或任何属性)时,它会被扩展为多个参数而不仅仅是一个?
感谢, 丹
这真的是最好的方法是什么?为什么CMake设计为使用与其自己的'set_target_properties'命令不兼容的列表格式? – 2015-12-01 00:06:29
这种技术的主要问题一般在于,如果任何标志包含空格,它们将导致问题。如果可能的话(例如,如果包含外部提供的文件名,其中可能包含空格),将需要进行一些转义以保留参数中的空格。 – 2016-06-01 16:35:59
B +++ T。它不起作用。 'string(REPLACE“;”“”DEST $ {SRC})'用一个空字符串替换分号。只有这样才能工作:'foreach(OPT $ {LD_FLAGS})set(LINK_FLAGS“$ {LINK_FLAGS} $ {OPT}”) endforeach()'。这将是非常有趣的,除非这个C++ + p不是当今最流行的构建工具。 – Ethouris 2016-10-19 16:51:37