CMake:显示所有修改过的变量

时间:2017-11-23 11:06:44

标签: cmake

我希望有一个命令或选项来列出当前构建配置的所有已修改的缓存变量。虽然cmake -L[AH]很好,但它也非常庞大,并且没有显示哪些是非默认值。

似乎有一个变量属性MODIFIED听起来就像我正在寻找的那样 - 但文档并不是很令人放心:

  

内部管理财产。 不要设置或获取。   这是由CMake管理的内部缓存条目属性,用于跟踪条目的交互式用户修改。 忽略

这个问题也无济于事:CMAKE: Print out all accessible variables in a script

1 个答案:

答案 0 :(得分:0)

您可以通过很多方式更改或初始化CMake中的变量(命令行,环境变量,脚本文件等),但这些方法无法涵盖所有​​变量。

我刚刚提出了以下脚本,其中包含命令行开关。将以下文件放在CMake项目的根文件夹中,然后打印修改后的变量:

<强> PreLoad.cmake

set(_file "${CMAKE_BINARY_DIR}/UserModifiedVars.txt")

get_directory_property(_vars CACHE_VARIABLES)
list(FIND _vars "CMAKE_BACKWARDS_COMPATIBILITY" _idx)

if (_idx EQUAL -1)
    list(REMOVE_ITEM _vars "CMAKE_COMMAND" "CMAKE_CPACK_COMMAND" "CMAKE_CTEST_COMMAND" "CMAKE_ROOT")
    file(WRITE "${_file}" "${_vars}")
else()
    file(READ "${_file}" _vars)
endif()

foreach(_var IN LISTS _vars)
    message(STATUS "User modified ${_var} = ${${_var}}")
endforeach()

这将在其他任何内容之前加载,因此可以相对容易地识别用户修改的变量并将它们存储到文件中供以后参考。

CMAKE_BACKWARDS_COMPATIBILITY是CMake在配置运行结束时设置的缓存变量,因此此处用于标识已配置的CMake项目。

<强>参考