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

nan*_*loo 22 cmake

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

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

功能定义

function(twice varValue varName)
set(${varName} ${varValue}${varValue} PARENT_SCOPE)
endfunction(twice)
Run Code Online (Sandbox Code Playgroud)

用法

set(arg foo)
twice(${arg} arg)
message("arg = "${arg})
Run Code Online (Sandbox Code Playgroud)

结果

arg = foofoo
Run Code Online (Sandbox Code Playgroud)

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

那么,有更好的方法吗?

非常感谢!

Phi*_*ipp 40

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

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

SET(arg "foo")
twice(arg)
MESSAGE(STATUS ${arg})
Run Code Online (Sandbox Code Playgroud)

输出"foofoo"

  • 非常感谢,它正在工作。但是,我注意到一些奇怪的行为,请参阅[here](http://stackoverflow.com/questions/14397298/cmake-strange-function-argument-name-behaviour) (2认同)

Th.*_*ann 8

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

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

macro(debugValue variableName)
    debug("${variableName}=\${${variableName}}")
endmacro()
Run Code Online (Sandbox Code Playgroud)

用法:

set(MyFoo "MyFoo's value")
debugValue(MyFoo)
Run Code Online (Sandbox Code Playgroud)

输出:

MyFoo=MyFoo's value
Run Code Online (Sandbox Code Playgroud)