CMake:如何从函数内部修改变量

Fra*_*fer 3 function cmake

从 CMake 函数内部修改调用者变量的最佳实践是什么?认为

function(MyFunction IN_OUT_NAME)

   ... what to do here ...

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

   ... what to do here ...

endfunction()
Run Code Online (Sandbox Code Playgroud)

需要做什么才能使以下代码片段

set(MY_MESSAGE "this")
MyFunction(MY_MESSAGE)
message(${MY_MESSAGE})
Run Code Online (Sandbox Code Playgroud)

交付

this and that
Run Code Online (Sandbox Code Playgroud)

不重复的评论:

Kam*_*Cuk 6

只需用于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})
Run Code Online (Sandbox Code Playgroud)

替代方法,自 CMake 3.25 起可用 - 使用return(PROPAGATE ...)

function(MyFunction IN_OUT_NAME)
    string(APPEND ${IN_OUT_NAME} " and that")
    return(PROPAGATE ${IN_OUT_NAME})
endfunction()
Run Code Online (Sandbox Code Playgroud)