2016-06-30 3 views
0

テストCMakeLists.txtに呼び出します: "cmakeの"ネストされた関数は、CMakeの(別の引数として1の結果を使用)

function(foo param) 
    return("hello") 
endfunction() 

message(foo("oops")) 

上記のファイルで実行されると、 "foo(oops)"が表示されます。私はそれが "こんにちは"を印刷することを期待しました。

CMakeで、ある関数が別の関数の結果を受け取るようにするにはどうすればよいですか?

答えて

1

CMake関数は、与えたコード例のように「値を返す」ことはありません。一般的には、CMakeの組み込みまたは関数が値を返すように望んでいるならば、それは中に結果を格納する変数の名前を取る必要があります。そして、

function(foo param ret) 
    set(${ret} "hello ${param}" PARENT_SCOPE) 
endfunction() 

、あなたは、発信者に自分自身を制御フローを構築する必要があります:

foo("world" hello_world) 
message(STATUS "foo returned: ${hello_world}") 
foo(${hello_world} hello2) 
message(STATUS "foo second call returned: ${hello2}") 
+0

CMakeでは "return(x)"とは何ですか?ただxを無視する?そのように見えますが、ドキュメントはこれを言っていません。また、関数foo()が値を返さないだけでなく、私の例でも呼び出されていないことに驚いています! –

+0

ドキュメントは構文を 'return()'としているので、 'return(x)'は未定義の振る舞いになるでしょう。私も、fooがこの例では呼び出されていないことに驚くことはありません。シェルスクリプトに 'ls'が実行されないことに驚かされるべきではない' echo ls'を置くようなものです。 –

関連する問題