CMake: вывести список с разделителями

По умолчанию выходы CMake выходят без разделителей, например

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

Выходы

abcd

Как вы можете (легко) сделать вывод CMake похожим на то, что на самом деле хранится?

a;b;c;d

(Типичный пример использования - для вывода списка путей поиска)

Ответы

Ответ 1

Включите переменную разыменования в кавычках.

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

Выходы

a;b;c;d

Ответ 2

Вы можете написать функцию, чтобы присоединиться к элементам списка вместе с разделителем, а затем распечатать это. Например, такая функция:

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