在使用 CMake 时,开发者经常需要获取和调试各种属性或变量。CMake 提供了一个非常有用的命令:get_cmake_property,它可以动态检索 CMake 的元信息,例如变量列表、缓存变量、模块路径等。这篇文章将详细介绍 get_cmake_property 的用法及其应用场景。
- 什么是 get_cmake_property?
get_cmake_property 是 CMake 提供的命令,用于获取 CMake 的属性或元数据,并将结果存储到指定的变量中。它可以帮助开发者调试、检查当前 CMake 环境,甚至动态调整配置。
基本语法:
get_cmake_property(<result> <property>)
<result>:指定一个变量名,用于存储检索到的属性值。
<property>:需要获取的属性类型或名称。
- 常见属性类型
属性名 含义
VARIABLES 当前定义的所有变量(包括用户和系统定义的变量)
CACHE_VARIABLES 所有缓存变量(通常是通过 set(... CACHE ...) 定义的)
MODULE_PATH CMake 搜索模块时的路径
TARGETS 当前定义的所有目标(如 add_executable 的目标名)
MODULE_SUPPORT CMake 是否支持模块功能
- 实际应用
3.1 获取所有变量
通过 VARIABLES 属性,可以获取当前定义的所有变量,并将其按字典序排序后打印出来:
get_cmake_property(all_variables VARIABLES)
list(SORT all_variables)
foreach(var IN LISTS all_variables)
message(STATUS "${var}=${${var}}")
endforeach()
3.2 获取缓存变量
缓存变量通常是 CMake 配置阶段生成的变量,比如编译器路径、构建类型等。可以通过以下方法获取并打印:
get_cmake_property(cache_variables CACHE_VARIABLES)
list(SORT cache_variables)
foreach(var IN LISTS cache_variables)
message(STATUS "Cache variable: ${var}=${${var}}")
endforeach()
3.3 获取模块路径
CMake 搜索模块(如 find_package 调用的模块)的路径可以通过 MODULE_PATH 属性获取:
get_cmake_property(module_paths MODULE_PATH)
message(STATUS "Module search paths: ${module_paths}")
3.4 检查模块支持
想知道当前的 CMake 是否支持模块功能?可以使用以下代码:
get_cmake_property(supports_modules MODULE_SUPPORT)
message(STATUS "Module support: ${supports_modules}")
- 实用案例
4.1 打印所有变量及其值
以下函数可以打印当前 CMake 定义的所有变量及其对应值,是调试环境的利器:
function(print_all_variables)
message(STATUS "CMake Variables:")
get_cmake_property(variable_names VARIABLES)
list(SORT variable_names)
foreach(var_name IN LISTS variable_names)
message(STATUS "${var_name}=${${var_name}}")
endforeach()
endfunction()
print_all_variables()
4.2 显示缓存变量
将属性替换为 CACHE_VARIABLES 即可显示所有缓存变量,示例如下:
get_cmake_property(variable_names CACHE_VARIABLES)
list(SORT variable_names)
foreach(var_name IN LISTS variable_names)
message(STATUS "Cache: ${var_name}=${${var_name}}")
endforeach()
- 注意事项
如果指定的属性不存在,结果变量会被设置为 NOTFOUND。
get_cmake_property 获取的值可能是列表或单个字符串,因此在处理前需要判断类型并按需操作。
配合 list() 函数可以对返回结果进行排序、分割等操作。 - 总结
get_cmake_property 是一个强大的调试工具,帮助开发者了解当前 CMake 的状态及配置。无论是调试复杂的构建系统,还是动态调整 CMake 环境,它都非常实用。
通过学习和应用上述方法,你可以轻松获取和操作 CMake 的元信息,编写出更加高效、健壮的构建脚本。
参考学习:https://stackoverflow.com/questions/9298278/cmake-print-out-all-accessible-variables-in-a-script