2012-01-19 11 views
6

Ho un comando personalizzato in un CMakeLists.txt:Perché CMake esegue il prefisso degli spazi con barre retroverse quando si esegue un comando?

set(testfiles "test1 test2") 
add_custom_target(testtouch COMMAND touch ${testfiles}) 

Quando eseguo "fare testtouch VERBOSE = 1" Vedo che esegue:

touch test1\ test2 

Questo è solo un esempio, ma Ho questo problema in un progetto reale e "\" stanno rompendo il comando. Nota che ottengo la variabile (qui testfiles) da uno script Trova e non posso semplicemente eliminare le virgolette doppie.

Perché CMake lo fa?

Come evitarlo?

risposta

5

Perché a volte la differenza tra il tipo di variabile lista cmake e la stringa letterale cmake diventa importante.

tenta di modificare la configurazione variabile al seguito per evitare il problema:

set(testfiles "test1" "test2") 
+0

Grazie per la risposta. Non riesco a cambiare l'impostazione della variabile perché la ricevo da un altro script. Posso manipolare la variabile in un modo per ottenere lo stesso? – Barth

+0

Rispondi a me stesso: ho usato la seguente riga per farlo funzionare: string (REPLACE "" ";" testfile $ {testfiles}) – Barth

+0

Questo vale anche per le opzioni di passaggio come "-o outfile". Nessuna possibilità di passare questo come una stringa; dobbiamo fornirlo come lista "-o; outfile", per quanto sia controintuitivo. –

Problemi correlati