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

vyswwuz2  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(158)

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

  1. function(MyFunction IN_OUT_NAME)
  2. ... what to do here ...
  3. string(APPEND ${IN_OUT_NAME} " and that")
  4. ... what to do here ...
  5. endfunction()

需要做些什么才能使下面的代码片段

  1. set(MY_MESSAGE "this")
  2. MyFunction(MY_MESSAGE)
  3. message(${MY_MESSAGE})

提供

  1. this and that

注意事项:

7y4bm7vi

7y4bm7vi1#

只需使用PARENT_SCOPE将值导出到父作用域:

  1. function(MyFunction IN_OUT_NAME)
  2. string(APPEND ${IN_OUT_NAME} " and that")
  3. set(${IN_OUT_NAME} "${${IN_OUT_NAME}}" PARENT_SCOPE)
  4. endfunction()
  5. set(MY_MESSAGE "this")
  6. MyFunction(MY_MESSAGE)
  7. message(${MY_MESSAGE})

另一种方法,从CMake 3.25开始可用-使用return(PROPAGATE ...)

  1. function(MyFunction IN_OUT_NAME)
  2. string(APPEND ${IN_OUT_NAME} " and that")
  3. return(PROPAGATE ${IN_OUT_NAME})
  4. endfunction()

相关问题