从 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)
不重复的评论:
修改函数内的变量是关于 JavaScript 而不是 CMake
JavaScript 是一种按引用传递还是按值传递的语言?是关于 JavaScript 而不是 CMake
只需用于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)