CMake:打印出脚本中所有可访问的变量


222

我想知道是否有一种方法可以打印出CMake中的所有可访问变量。我对CMake变量不感兴趣-如--help-variables选项中一样。我说的是我定义的变量或包含的脚本定义的变量。

我目前包括:

INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityCXX.cmake)

我希望可以只打印出这里的所有变量,而不必遍历所有文件并阅读可用的内容-我可能会发现一些我不知道的变量可能有用。帮助学习和发现将是一件好事。严格用于调试/开发。

这类似于在Lua打印可访问当前范围的所有局部变量中的问题,但对于CMake!

有人这样做吗?

Answers:


368

使用该get_cmake_property函数,以下循环将打印出所有已定义的CMake变量及其值:

get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames)
foreach (_variableName ${_variableNames})
    message(STATUS "${_variableName}=${${_variableName}}")
endforeach()

也可以将其嵌入便利函数中,该函数可以选择使用正则表达式仅打印名称匹配的变量子集

function(dump_cmake_variables)
    get_cmake_property(_variableNames VARIABLES)
    list (SORT _variableNames)
    foreach (_variableName ${_variableNames})
        if (ARGV0)
            unset(MATCHED)
            string(REGEX MATCH ${ARGV0} MATCHED ${_variableName})
            if (NOT MATCHED)
                continue()
            endif()
        endif()
        message(STATUS "${_variableName}=${${_variableName}}")
    endforeach()
endfunction()

要打印环境变量,请使用CMake的命令模式

execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "environment")

这是一个非常有用的代码段。为什么它不打印出我在命令行上设置的ENV变量?
IgorGanapolsky '16

2
@Geremia,您可以将此代码块复制到文件myfile.txt并运行:cmake -P myfile.txt
Idok

2
VARIABLES仅列出“在当前目录中定义的变量”。cmake.org/cmake/help/latest/prop_dir/…–
CivFan

1
我必须STATUSmessage命令中删除才能使输出可见。
luator

没为我工作。我所得到的只是以CMAKE_ *开头的变量
C约翰逊

173

另一种方法是简单地使用:

cmake -LAH

联机帮助页

-L[A][H]

列出非高级缓存变量。

列出缓存变量将运行CMake并列出CMake缓存中所有未标记为INTERNAL或的变量ADVANCED。这将有效显示当前的CMake设置。

如果A指定,则还将显示高级变量。

如果H指定,还将显示每个变量的帮助。


4
在构建目录中执行此操作
jtsagata 2013年

5
请注意,此方法不打印系统变量(WIN32,UNIX,APPLE等)。
holocronweaver

4
这不会打印出所有可用的库,仅显示已缓存的库。
rafalcieslak '16

2
这不会打印出所有变量,仅显示缓存的变量。(FTFY拉法)
Qwertie

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.