CMake:输出带分隔符的列表

时间:2013-07-16 00:14:29

标签: cmake

默认情况下,CMake输出没有分隔符的列表,例如

set(my_list a b c d)
message(${my_list})

输出

abcd

你怎么能(轻松地)使CMake输出像实际存储的那样?

a;b;c;d

(典型的用例是输出搜索路径列表)

3 个答案:

答案 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})