z_kmpkg_get_cmake_vars
注意
这是 kmpkg内部用于实现核心逻辑的辅助函数。 其行为和参数可能会以不兼容的方式突发变更,且无任何通知。 请勿在自定义端口中使用该函数。
通过创建空的“虚拟 CMake 项目”并执行 cmake configure 流程,探测当前构建环境下的 CMake 内置变量,并将这些变量重命名后导出到临时文件中,供 kmpkg 核心逻辑复用。
用法
z_kmpkg_get_cmake_vars(<out-var>)
调用该函数后,<out-var> 会被赋值为一个生成的临时 CMake 文件路径——该文件中包含了探测到的 CMAKE_* 变量(重命名为 KMPKG_DETECTED_* 格式)。
参数说明
<out-var>
必填参数,指定输出变量名称。该变量最终存储的是生成的临时 CMake 文件路径,需通过 include() 加载该文件才能访问探测到的变量。
核心说明
- 探测逻辑:函数会创建一个仅包含最基础配置的“虚拟 CMake 项目”,执行
cmake configure以触发 CMake 对当前环境的探测(如编译器标志、系统信息、架构等); - 变量重命名:探测到的
CMAKE_XXX变量会被统一重命名为KMPKG_DETECTED_CMAKE_XXX(简化写法也常用KMPKG_DETECTED_XXX),例如:CMAKE_CXX_FLAGS→KMPKG_DETECTED_CMAKE_CXX_FLAGS(或KMPKG_DETECTED_CXX_FLAGS);CMAKE_SYSTEM_NAME→KMPKG_DETECTED_CMAKE_SYSTEM_NAME;
- 缓存机制:所有对该函数的调用都会复用同一个输出文件,不会重复生成——即使多次调用,临时文件仅在首次执行时生成,后续调用直接返回已生成的文件路径;
- 使用前提:必须通过
include("${out-var}")加载临时文件,才能在当前作用域中访问KMPKG_DETECTED_*系列变量。
示例(仅作内部逻辑参考)
# 1. 调用内部函数,获取包含探测变量的临时文件路径
z_kmpkg_get_cmake_vars(cmake_vars_file)
# 2. 加载临时文件,使 KMPKG_DETECTED_* 变量生效
include("${cmake_vars_file}")
# 3. 使用探测到的变量(打印 CXX 编译标志)
message(STATUS "Detected CXX flags: ${KMPKG_DETECTED_CMAKE_CXX_FLAGS}")
# 内部简化写法(等价)
message(STATUS "Detected CXX flags: ${KMPKG_DETECTED_CXX_FLAGS}")
关联参考
该函数是 kmpkg_configure_make 等核心函数的底层依赖,用于为 Make 项目自动适配当前构建环境的编译/链接标志:
kmpkg_configure_make 源码