2016-12-16 17 views
2

最初の引数としてリストをとり、2番目の引数に1つの名前をとるCMake関数を作成したいとします。配列を関数に渡す

function (my_function PROJECT_SRC DEPENDENCY_LIB) 
    message (STATUS "Dependency lib is ${DEPENDENCY_LIB}") 
endfunction() 

私はそれを使用すると、私が期待するものではありません。いくつかのソースファイルをリストに追加すると、関数はリストの2番目の引数を出力します。

file (GLOB TEST_SRC *.cpp) 
set (MY_DEPENDENCY "Something") 
# It prints "Dependency lib is something/inside/TEST_SRC" 
my_function(${TEST_SRC} ${MY_DEPENDENCY}) 

関数に渡す2番目の引数を取得するにはどうすればよいですか?変数をCMake関数に渡すときにリストと単一の値を区別する方法はありますか?

+0

あなたはとても親切喜ばと閉じ滞在し、この質問に対する答えの一つを受け入れるだろうか? – Kamiccolo

答えて

2

まず...背中にCMakeの基本に。 listとは何ですか? [1] [2]

これは単なる文字列で、;の値が区切られています。だから、以下:

set(FOO "test") 
list(LENGTH FOO FOO_LEN) 
message(STATUS "List length:" ${FOO_LEN}) 

はあなたに2つ目の質問に答えるために、あなただけのリストの長さをチェックしている場合することができ、そこで、2

を生成する1.

set(FOO "aaaaaa;bbbbbbbb") 
list(LENGTH FOO FOO_LEN) 
message(STATUS "List length:" ${FOO_LEN}) 

を生成しますそれは1に等しい---それは基本的な文字列として解釈することができる単一の値を含む "リスト"です。

あなたの最初の質問---あなたの例では${TEST_SRC} ${MY_DEPENDENCY}が1つの大きな「リスト」として関数に渡されています。だから、二つの別々の引数にそれらを分離するために、あなたは

a)の両方の引数とこれによって引用は---それらを個別に渡す必要があり

b)に渡されたリストで管理し、それらを引用し、あなたの機能ではありません[ 3]

[1] https://cmake.org/cmake/help/v3.0/manual/cmake-language.7.html#lists

を[2] https://cmake.org/cmake/help/v3.0/command/list.html

0

私は自分で解決策を見つけました。

私は、文字列としてリスト引数を渡す:すべての

my_function("${TEST_SRC}" ${MY_DEPENDENCY})