Issue
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:
Modify a variable inside a function is about JavaScript not CMake
Is JavaScript a pass-by-reference or pass-by-value language? is about JavaScript not CMake
Solution
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()
Answered By - KamilCuk Answer Checked By - Marie Seifert (WPSolving Admin)