默认情况下,CMake输出没有分隔符的列表,例如
set(my_list a b c d)
message(${my_list})
输出
abcd
你怎么能(轻松地)使CMake输出像实际存储的那样?
a;b;c;d
(典型的用例是输出搜索路径列表)
答案 0 :(得分:29)
将取消引用的变量括在引号中。
set(my_list a b c d)
message("${my_list}")
输出
a;b;c;d
答案 1 :(得分:6)
您可以编写一个函数来将列表项与分隔符一起加入,然后将其打印出来。例如,这样一个函数:
function (ListToString result delim)
list(GET ARGV 2 temp)
math(EXPR N "${ARGC}-1")
foreach(IDX RANGE 3 ${N})
list(GET ARGV ${IDX} STR)
set(temp "${temp}${delim}${STR}")
endforeach()
set(${result} "${temp}" PARENT_SCOPE)
endfunction(ListToString)
然后,您可以像这样使用它:
set(my_list a b c d)
ListToString(str ", " ${my_list})
message(STATUS "${str}")
哪个输出:
a, b, c, d
答案 2 :(得分:0)
当项目之间的字符串为;
时,也可以使用;
将string(REPLACE ...)
替换为其他定界符。例如:
set(my_list a b c d)
string(REPLACE ";" ", " str "${my_list}")
message(STATUS ${str})