CMake:输出带分隔符的列表

Zer*_*ero 23 cmake

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

set(my_list a b c d)
message(${my_list})
Run Code Online (Sandbox Code Playgroud)

输出

abcd
Run Code Online (Sandbox Code Playgroud)

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

a;b;c;d
Run Code Online (Sandbox Code Playgroud)

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

Zer*_*ero 38

将解除引用的变量括在引号中.

set(my_list a b c d)
message("${my_list}")
Run Code Online (Sandbox Code Playgroud)

输出

a;b;c;d
Run Code Online (Sandbox Code Playgroud)

  • 有时 CMake 没有什么意义,为什么在 `${my_list}` 或 `"${my_list}"` 上发送消息很重要?让我觉得他们真的没有把脚本语言的细节考虑得很好。 (4认同)
  • 谢谢.输出到文件时也是如此.我希望在文档中更好地解释这个问题...... (2认同)

Mue*_*ito 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)
Run Code Online (Sandbox Code Playgroud)

然后,您可以像这样使用它:

set(my_list a b c d)
ListToString(str ", " ${my_list})
message(STATUS "${str}")
Run Code Online (Sandbox Code Playgroud)

哪个输出:

a, b, c, d
Run Code Online (Sandbox Code Playgroud)