2017-05-24 11 views
0

関数に渡される変数を変更したい。ここには私が書いたコードがあります:既存の変数を変更するには?

FUNCTION(TEST var) 
    set(${var} "ABC") 
    message(${var}) # 2) 123 
    set(${var} "ABC" PARENT_SCOPE) 
ENDFUNCTION(TEST) 

set(v "123") 
message(${v}) # 1) 123 
TEST(${v}) 
message(${v}) # 3) 123 

なぜすべての出力が123になるのですか?私は期待した#2#3印刷ABC

このような変数を渡した場合 - TEST(v) - 私は他の出力を持っています:#1 - 123#2 - v#3 - ABCです。どうしてこれなの?違いは何ですか?

答えて

1

vの内容をTEST()に渡しています。だから、次のようになります。

FUNCTION(TEST var) 
    set(${var} "ABC") 
    message(${${var}}) 
    set(${var} "ABC" PARENT_SCOPE) 
ENDFUNCTION(TEST) 

set(v "123") 
message(${v}) 
TEST(v) 
message(${v}) 

リファレンス

+0

ありがとうございます。これは "通常の"変数では機能しますが、リスト変数では機能しません。そして、この '$ {$ {var}}'は何ですか?なぜここに二重括弧が必要なのですか? – nikitablack

+0

@nikitablackこれはリスト変数に対しても機能します。なぜなら、CMakeのリストはセミコロンで区切られた文字列だからです。また、二重逆参照のためには二重括弧が必要です(最初は変数名、次にこの変数の内容) – Florian

関連する問題