如何编写一个通过引用传递变量的好函数?

时间:2013-01-17 09:09:51

标签: cmake

如标题中所述,我想在cmake中编写一个“nice”函数,它能够修改一个作为参数传递给该函数的变量。

我能想到的唯一方法就是丑陋:

功能定义

function(twice varValue varName)
set(${varName} ${varValue}${varValue} PARENT_SCOPE)
endfunction(twice)

用法

set(arg foo)
twice(${arg} arg)
message("arg = "${arg})

结果

arg = foofoo

在我看来,根本没有人可以传递的变量的真正概念?! 我觉得cmake有一些基本的东西,我还没有接受。

那么,有更好的方法吗?

非常感谢!

2 个答案:

答案 0 :(得分:38)

您无需传递变量的值和名称。名称就足够了,因为您可以通过名称访问该值:

function(twice varName)
  SET(${varName} ${${varName}}${${varName}} PARENT_SCOPE)
endfunction()

SET(arg "foo")
twice(arg)
MESSAGE(STATUS ${arg})

输出“foofoo”

答案 1 :(得分:7)

我使用这两个宏进行调试:

macro(debug msg)
    message(STATUS "DEBUG ${msg}")
endmacro()

macro(debugValue variableName)
    debug("${variableName}=\${${variableName}}")
endmacro()

用法:

set(MyFoo "MyFoo's value")
debugValue(MyFoo)

输出:

MyFoo=MyFoo's value