Frank-Rene Schäfer
Frank-Rene Schäfer

Reputation: 3352

CMake: Howto modify a variable from inside a function

What is the best practice to modify a caller's variable from inside a CMake-function. Assume

function(MyFunction IN_OUT_NAME)

   ... what to do here ...

   string(APPEND ${IN_OUT_NAME} " and that")

   ... what to do here ...

endfunction()

What needs to be done such that the following code fragment

set(MY_MESSAGE "this")
MyFunction(MY_MESSAGE)
message(${MY_MESSAGE})

delivers

this and that

Not-a-duplicate-remarks:

Upvotes: 3

Views: 1780

Answers (1)

KamilCuk
KamilCuk

Reputation: 141910

Just use PARENT_SCOPE to export the value to parent scope:

function(MyFunction IN_OUT_NAME)
    string(APPEND ${IN_OUT_NAME} " and that")
    set(${IN_OUT_NAME} "${${IN_OUT_NAME}}" PARENT_SCOPE)
endfunction()
    
set(MY_MESSAGE "this")
MyFunction(MY_MESSAGE)
message(${MY_MESSAGE})

Alternate way, available since CMake 3.25 - use return(PROPAGATE ...):

function(MyFunction IN_OUT_NAME)
    string(APPEND ${IN_OUT_NAME} " and that")
    return(PROPAGATE ${IN_OUT_NAME})
endfunction()

Upvotes: 6

Related Questions