You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMakeLists.txt脚本内部获取缓存变量列表

如何在CMakeLists.txt中获取所有缓存变量列表?

当然可以!CMake提供了直接获取所有缓存变量的方式,完全能满足你描述的场景——不管是通过-D参数传入的变量、用option定义的变量,还是CMake自身的内置缓存变量,都可以收集到一个列表里。

核心实现方法

你可以使用CMake的get_cmake_property命令,配合内置的CACHE_VARIABLES属性来获取所有缓存变量,将它们存入你需要的MY_CACHE_LIST变量中:

# 把所有缓存变量收集到MY_CACHE_LIST列表
get_cmake_property(MY_CACHE_LIST CACHE_VARIABLES)

验证与遍历示例

如果想确认结果,可以遍历这个列表打印出来:

# 打印所有缓存变量,方便验证
message(STATUS "=== 所有缓存变量 ===")
foreach(cache_var ${MY_CACHE_LIST})
    message(STATUS "  ${cache_var}")
endforeach()

执行CMake时,你会看到输出里包含:

  • 你通过-D传入的MY_VAR1、MY_VAR2
  • 用option(MY_VAR3 "a cache setting" ON)定义的MY_VAR3
  • CMake自带的缓存变量(比如CMAKE_BUILD_TYPE、CMAKE_INSTALL_PREFIX、CMAKE_C_COMPILER等)

可选:过滤出自定义缓存变量

如果只想要自己定义的缓存变量,不想包含CMake内置的,可以通过过滤规则实现(比如排除以CMAKE_开头的变量):

set(MY_CUSTOM_CACHE_LIST "")
foreach(cache_var ${MY_CACHE_LIST})
    # 排除CMake内置的前缀变量
    if(NOT cache_var MATCHES "^CMAKE_")
        list(APPEND MY_CUSTOM_CACHE_LIST ${cache_var})
    endif()
endforeach()

message(STATUS "=== 自定义缓存变量 ===")
foreach(custom_var ${MY_CUSTOM_CACHE_LIST})
    message(STATUS "  ${custom_var}")
endforeach()

这样就能得到仅包含你自己定义的缓存变量列表了。

内容的提问来源于stack exchange,提问作者Kabu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:22:41