2013-01-17 7 views
18

というタイトルで述べたように、私はその関数にパラメータとして渡される変数を変更できる "nice"関数をcmakeに書きたいと思います。参照によって変数を渡す素敵な関数を書くには?

私はそれをやって考えることができる唯一の方法は醜いです:

関数定義

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

使用

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

結果

私にとっては、まったく渡すことのできる変数の本当の概念はありませんか? 私はまだ取り入れなかった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 
関連する問題