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