2016-06-30 7 views
2

Nehmen wir an, wir haben eine CMake-Funktion namens func, die benannte Argumente, sagen NAMED1 und NAMED2. Das erste Argument ist obligatorisch und das zweite ist optional. Zum BeispielVerwandeln Sie die Liste in Argumente für cmake-Funktion

func(NAMED1 foo NAMED2 optional) 

Jetzt habe ich eine Schleife, die diese Funktion func bei jeder Iteration aufrufen muss, sondern in Abhängigkeit von der aktuellen Iteration Ich brauche manchmal den optionalen Wert zu liefern und manchmal nicht. Also habe ich bei jeder Iteration eine Liste der Argumente bauen, sagen

list(APPEND args "NAMED1" "foo") 
if (...something...) 
    list(APPEND args "NAMED2" "optional") 
endif() 

So habe ich die args Liste jetzt. Als eine Zeichenkette, kann es aussehen wie

NAMED1;foo 

oder es kann aussehen wie

NAMED1;foo;NAMED2;optional 

Also dachte ich, bespannen die ganze Liste ersetzen die resultierende args mit

string(REPLACE ";" " " args "${args}") 

Dann schauen wie

NAMED1 foo NAMED2 optional 

Also dachte ich, diese Zeichenfolge an die Funktion mit func,

func("${args}") 

jetzt aber das Problem ist, passieren, dass CMake denkt, dass dieses eine große Zeichenfolge ist, während er es als separate Strings interpretieren sollte. Wie kann ich das erreichen?

+0

Nur 'func ($ {args})' ohne Anführungszeichen und ohne die Notwendigkeit des Ersatzes der ';' funktionieren sollte. Ich habe das schon oft in der Vergangenheit benutzt. Siehe auch [hier] (http://stackoverflow.com/questions/35847655/cmake-when-to-quote-variables). – Florian

+0

Wow! Du hast recht. Du kannst das als Antwort posten und ich werde es akzeptieren. – rwols

Antwort

3

Drehen meines Kommentars in einer Antwort

Gerade func(${args}) ohne Anführungszeichen und ohne die Notwendigkeit des Ersatzes der ; funktionieren sollte.

Ich habe dies in der Vergangenheit oft verwendet (vor allem mit der Weiterleitung "der Rest der Parameter" mit ${ARGN}).

Referenzen

Verwandte Themen