跳到主要内容

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() 加载该文件才能访问探测到的变量。

核心说明

  1. 探测逻辑:函数会创建一个仅包含最基础配置的“虚拟 CMake 项目”,执行 cmake configure 以触发 CMake 对当前环境的探测(如编译器标志、系统信息、架构等);
  2. 变量重命名:探测到的 CMAKE_XXX 变量会被统一重命名为 KMPKG_DETECTED_CMAKE_XXX(简化写法也常用 KMPKG_DETECTED_XXX),例如:
    • CMAKE_CXX_FLAGSKMPKG_DETECTED_CMAKE_CXX_FLAGS(或 KMPKG_DETECTED_CXX_FLAGS);
    • CMAKE_SYSTEM_NAMEKMPKG_DETECTED_CMAKE_SYSTEM_NAME
  3. 缓存机制:所有对该函数的调用都会复用同一个输出文件,不会重复生成——即使多次调用,临时文件仅在首次执行时生成,后续调用直接返回已生成的文件路径;
  4. 使用前提:必须通过 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 源码

源码

scripts/cmake/z_kmpkg_get_cmake_vars.cmake