CMake list to string:简单的分号替换

Ant*_*ane 7 cmake

我对一个非常简单的例子感到困惑.我有一个标准列表,所以基本上它的字符串表示使用分号作为分隔符.我想用另一个替换它:

set(L1 "A" "B" "C")
message("L1: ${L1}")

string(REPLACE ";" "<->" L2 ${L1})
message("L2: ${L2}")
Run Code Online (Sandbox Code Playgroud)

这个片段打印:

L1: A;B;C
L2: ABC
Run Code Online (Sandbox Code Playgroud)

而且我不明白为什么.根据其他一些SO答案,我的字符串替换似乎有效.我究竟做错了什么 ?有没有办法将值存储A<->B<->C在我的第二个变量中?

注意:我使用CMake 3.7.2

Flo*_*ian 12

只需加上${L1}引号:

set(L1 "A" "B" "C")
message("L1: ${L1}")

string(REPLACE ";" "<->" L2 "${L1}")
message("L2: ${L2}")
Run Code Online (Sandbox Code Playgroud)

否则,列表将再次扩展为空格分隔的参数列表.

参考

  • 我认为你可以从 cmake 3.12 开始使用 `list(JOIN L1 ", " L2)`。 (4认同)

Som*_*ude 8

${L1} 它不是一个字符串,它是一个列表.如果你想要一个字符串,那么你需要用双引号括起来"${L1}".