2013-07-16 12 views
14

Per impostazione predefinita, CMake genera liste senza delimitatori, ad esempioCMake: uscita una lista con delimitatori

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

uscite

abcd 

Come si può (facilmente) fare CMake uscita qualcosa di simile a ciò che è effettivamente memorizzata ?

a;b;c;d 

(Un tipico caso d'uso è per l'emissione di un elenco di percorsi di ricerca)

risposta

19

racchiudere la variabile Dereferenced tra virgolette.

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

uscite

a;b;c;d 
+1

Grazie. Lo stesso vale per l'output in un file. Vorrei che la cosa fosse spiegata meglio nella documentazione ... – Antonio

4

Si potrebbe scrivere una funzione per unire le voci di una lista insieme con un delimitatore, e quindi stampare quello fuori posto. Ad esempio, una tale funzione:

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) 

Quindi, è possibile usarli anche in questo modo:

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

quali uscite:

a, b, c, d 
+0

Hai i nomi degli argomenti all'indietro? –