如何在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
相关产品推荐
相关产品推荐

