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