2016-06-30 36 views
2

funcという名前の引数を取るCMake関数、たとえばNAMED1NAMED2があるとしましょう。最初の引数は必須で、2番目の引数はオプションです。例えばリストをcmake関数の引数に変換します

func(NAMED1 foo NAMED2 optional) 

は、今私は、各反復でこの関数funcを呼び出す必要があるループを持っていますが、現在の反復に応じて、私は時々、オプションの値を供給し、時にはないようにする必要があります。だから私は、引数のリストを作成し、各反復で、だから私は今argsリストを持っている

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

を言います。文字列として、それは

NAMED1;foo 

のように見える場合もあれば、だから私は

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

でリスト全体を置き換える文字列に思っ次いで、得られたargsが見えるでしょう

NAMED1;foo;NAMED2;optional 

のように見えるかもしれませんlike

NAMED1 foo NAMED2 optional 

だから私は

func("${args}") 

で、機能funcにこの文字列を渡すと考えしかし、それは別の文字列としてそれを解釈する必要がありながら、問題は今、cmakeのは、これは一つの大きな文字列であると考えていることです。どうすればこれを達成できますか?

+0

ちょうど 'FUNC($ {}引数)'引用符と '交換を必要とせず、'動作するはずです。私は過去にこれを何度も使ってきました。 [こちら](http://stackoverflow.com/questions/35847655/cmake-when-to-quote-variables)も参照してください。 – Florian

+0

うわー!あなたが正しい。それを回答として投稿し、私はそれを受け入れるでしょう。 – rwols

答えて

3

引用符なしと;が動作するはず交換を必要とせずに答え

だけfunc(${args})に私のコメントを回します。

私は過去にこれを多く使用してきました(特に、「残りのパラメータ」は${ARGN}で転送しています)。

参照

関連する問題