2013-01-17 24 views
18

在說的稱號,我想在寫一個的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有一些基本的東西,我還沒有接受。

那麼,有沒有一個更好的辦法做到這一點?

非常感謝!

+0

https://github.com/boostcon/cppnow_presentations_2017/blob/master/05-19-2017_friday/effective_cmake__daniel_pfeifer__cppnow_05-19-2017.pdf建議您在要修改參數時使用宏。 –

回答

33

你並不需要通過值和變量的名稱。這個名字就夠了,因爲你可以通過名稱來訪問值:

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

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

輸出 「foofoo」

+1

非常感謝,它的工作。不過,我注意到一些奇怪的行爲,請參閱[這裏](http://stackoverflow.com/questions/14397298/cmake-strange-function-argument-name-behaviour) – nandaloo

6

我使用這兩個宏進行調試:

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