跳到主要内容

z_kmpkg_forward_output_variable

注意

这是 kmpkg内部用于实现核心逻辑的辅助函数。 其行为和参数可能会以不兼容的方式突发变更,且无任何通知。 请勿在自定义端口中使用该函数

通过局部函数作用域,将内部函数调用产生的值转发到「指针类型的输出参数」(父作用域变量)中。

用法

z_kmpkg_forward_output_variable(<ptr_to_parent_var> <value_var>)

参数说明

<ptr_to_parent_var>

指向父作用域变量名的局部变量名称。 最常见的场景是:该局部变量是函数的「指针式输出参数」(即函数接收一个参数名,用于将结果输出到父作用域的该参数中)。

<value_var>

需要被传播(转发)到父作用域的局部变量名称(该变量存储了内部计算的结果)。

核心说明

该函数的逻辑等价于以下手动编写的 CMake 代码,作用是简化“将局部变量值传递到父作用域输出参数”的流程:

if(DEFINED ptr_to_parent_var)
if(DEFINED value_var)
# 若局部变量有值,将其设置到父作用域的输出参数中
set("${ptr_to_parent_var}" "${value_var}" PARENT_SCOPE)
else()
# 若局部变量未定义,清空父作用域的输出参数
unset("${ptr_to_parent_var}" PARENT_SCOPE)
endif()
endif()

示例(仅作内部逻辑参考)

以下示例展示了该函数的典型使用场景:自定义函数接收输出参数,内部计算结果后通过该函数转发到父作用域。

# 自定义函数:计算文件的 SHA512 值,并通过 out_var 输出到父作用域
function(my_function out_var)
# 内部计算:将 somefile.txt 的 SHA512 值存入局部变量 local_var
file(SHA512 "somefile.txt" local_var)

# 调用内部函数,将 local_var 的值转发到父作用域的 out_var 中
z_kmpkg_forward_output_variable(out_var local_var)
endfunction()

# 调用自定义函数,接收输出结果
my_function(file_sha512)
# 此时 file_sha512 变量已被赋值为 somefile.txt 的 SHA512 值
message("File SHA512: ${file_sha512}")

源码

scripts/cmake/z_kmpkg_forward_output_variable.cmake