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?
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
Wow! Du hast recht. Du kannst das als Antwort posten und ich werde es akzeptieren. – rwols