Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 如何编写一个通过引用传递变量的好函数?_Cmake - Fatal编程技术网

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

Cmake 如何编写一个通过引用传递变量的好函数?,cmake,Cmake,正如在标题中所说,我想在cmake中编写一个“nice”函数,它能够修改作为参数传递到该函数中的变量 我能想到的唯一方法就是丑陋: 函数定义 用法 结果 在我看来,根本没有真正的变量概念可以传递?! 我觉得cmake有一些基本的东西我还没有接受 那么,有没有更好的方法呢 非常感谢 不需要传递变量的值和名称。名称足够了,因为您可以通过名称访问值: function(twice varName) SET(${varName} ${${varName}}${${varName}} PARENT_S

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

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

函数定义

用法

结果

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

那么,有没有更好的方法呢


非常感谢

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

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

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

输出“foooo”

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

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

非常感谢,它起作用了。然而,我注意到一些奇怪的行为,请参阅建议您在修改参数时使用宏。您的操作是正确的,但这不是您的错。CMake缺少真正脚本语言的基本概念。
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