2017-05-24 86 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