26

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

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

函数定义

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

用法

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

结果

arg = foofoo

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

那么,有没有更好的方法来做到这一点?

非常感谢!

4

2 回答 2

48

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

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

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

输出“foofoo”

于 2013-01-17T09:24:12.020 回答
8

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

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
于 2014-07-22T10:46:24.463 回答