36

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

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

输出

abcd

您如何(轻松地)使 CMake 输出类似于实际存储的内容?

a;b;c;d

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

4

3 回答 3

52

将取消引用的变量括在引号中。

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

输出

a;b;c;d
于 2013-07-16T00:14:29.413 回答
10

您可以编写一个函数来将列表中的项目与分隔符连接在一起,然后将其打印出来。比如这样一个函数:

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
于 2015-08-07T14:59:13.233 回答
0

当您;在项目之间有字符串时,您还可以;使用任何其他分隔符替换它们string(REPLACE ...)。例如:

set(my_list a b c d)
string(REPLACE ";"  ", " str "${my_list}")
message(STATUS ${str})
于 2020-12-18T11:53:38.583 回答