2013-07-16 27 views
14

Theo mặc định, CMake kết quả đầu ra danh sách mà không delimiters, ví dụ:CMake: In ra một danh sách với delimiters

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

Đầu ra

abcd 

Làm thế nào có thể giúp bạn (dễ dàng) làm CMake ra một cái gì đó giống như những gì đang thực sự được lưu trữ ?

a;b;c;d 

(Một trường hợp sử dụng điển hình là dành cho xuất ra một danh sách các đường dẫn tìm kiếm)

Trả lời

19

Kèm theo biến dereferenced trong dấu ngoặc kép.

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

Đầu ra

a;b;c;d 
+1

Cảm ơn. Điều tương tự cũng áp dụng khi xuất ra một tệp. Tôi muốn điều này được giải thích rõ hơn trong tài liệu ... – Antonio

4

Bạn có thể viết một chức năng để tham gia các hạng mục của một danh sách cùng với một dấu phân cách, và sau đó in ra rằng để thay thế. Ví dụ, một chức năng như:

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) 

Sau đó, bạn có thể sử dụng nó như vậy:

set(my_list a b c d) 
ListToString(str ", " ${my_list}) 
message(STATUS "${str}") 

Những kết quả đầu ra:

a, b, c, d 
+0

Bạn có tên đối số ngược? –

Các vấn đề liên quan