2013-01-17 16 views
18

come detto nel titolo, vorrei scrivere una funzione "carina" in cmake che sia in grado di modificare una variabile che viene passata come parametro in quella funzione.Come scrivere una funzione piacevole che passa le variabili per riferimento?

L'unico modo che posso pensare di farlo è brutto:

definizione della funzione

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

Uso

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

Risultato

arg = foofoo 

Mi sembra che non ci sia un vero concetto di variabili che si possano ignorare ?! Mi sembra che ci sia qualcosa di fondamentale su cmake che non ho ancora accettato.

Quindi, c'è un modo migliore per farlo?

Grazie mille!

+0

https://github.com/boostcon/cppnow_presentations_2017/blob/master/05-19-2017_friday/effective_cmake__daniel_pfeifer__cppnow_05-19-2017.pdf suggerisce di utilizzare le macro quando si desidera modificare un parametro. –

risposta

33

Non è necessario passare il valore e il nome della variabile. Il nome è abbastanza, perché si può accedere al valore dal nome:

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

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

uscite "foofoo"

+1

grazie mille, funziona. Tuttavia, ho notato alcuni comportamenti strani, vedi [qui] (http://stackoverflow.com/questions/14397298/cmake-strange-function-argument-name-behaviour) – nandaloo

6

io uso questi due macro per il debugging:

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

macro(debugValue variableName) 
    debug("${variableName}=\${${variableName}}") 
endmacro() 

Usage:

set(MyFoo "MyFoo's value") 
debugValue(MyFoo) 

Uscita:

MyFoo=MyFoo's value 
Problemi correlati