默认情况下,CMake 输出不带分隔符的列表,例如
set(my_list a b c d)
message(${my_list})
输出
abcd
您如何(轻松地)使 CMake 输出类似于实际存储的内容?
a;b;c;d
(一个典型的用例是输出搜索路径列表)
默认情况下,CMake 输出不带分隔符的列表,例如
set(my_list a b c d)
message(${my_list})
输出
abcd
您如何(轻松地)使 CMake 输出类似于实际存储的内容?
a;b;c;d
(一个典型的用例是输出搜索路径列表)
将取消引用的变量括在引号中。
set(my_list a b c d)
message("${my_list}")
输出
a;b;c;d
您可以编写一个函数来将列表中的项目与分隔符连接在一起,然后将其打印出来。比如这样一个函数:
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
当您;
在项目之间有字符串时,您还可以;
使用任何其他分隔符替换它们string(REPLACE ...)
。例如:
set(my_list a b c d)
string(REPLACE ";" ", " str "${my_list}")
message(STATUS ${str})