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

Mic*_*ael 199 cmake

我想知道是否有办法在CMake中打印出所有可访问的变量.我对CMake变量不感兴趣 - 就像在--help-variables选项中一样.我在谈论我定义的变量,或者包含脚本定义的变量.

我现在包括

INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityCXX.cmake)
Run Code Online (Sandbox Code Playgroud)

而且我希望我能打印出这里的所有变量,而不是必须浏览所有文件并阅读可用的内容 - 我可能会发现一些我不知道的变量可能有用.帮助学习和发现会很好.它严格用于调试/开发.

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

有没有人这样做过?

sak*_*kra 334

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

get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames)
foreach (_variableName ${_variableNames})
    message(STATUS "${_variableName}=${${_variableName}}")
endforeach()
Run Code Online (Sandbox Code Playgroud)

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

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()
Run Code Online (Sandbox Code Playgroud)

  • @Geremia你可以将这个代码块复制到文件**myfile.txt**并运行:**cmake -P myfile.txt** (2认同)
  • `VARIABLES` 仅列出“在当前目录中定义的变量”。https://cmake.org/cmake/help/latest/prop_dir/VARIABLES.html#prop_dir:VARIABLES (2认同)

jts*_*ata 166

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

cmake -LAH
Run Code Online (Sandbox Code Playgroud)

联机帮助页:

-L[A][H]

列出非高级缓存变量.

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

如果指定了A,则它还将显示高级变量.

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

  • 请注意,此方法不打印系统变量(WIN32,UNIX,APPLE等). (5认同)
  • 在您的构建目录上执行此操作 (4认同)
  • 这不会打印出所有可用的库,只会打印出缓存的库. (4认同)
  • 这不会打印出所有变量,只会打印出缓存的变量。(FTFY 拉法) (2认同)

Cir*_*四事件 8

ccmake是交互式检查缓存变量的一个很好的交互选项(option(set( CACHE:

sudo apt-get install cmake-curses-gui
mkdir build
cd build
cmake ..
ccmake ..
Run Code Online (Sandbox Code Playgroud)

  • 有用的工具:)然而,问题要求打印出所有变量..但这只会显示缓存的变量. (3认同)

Wil*_*eld 5

查看所有 cmake 内部变量的另一种方法是使用选项执行 cmake --trace-expand

这将为您提供所有已执行的 .cmake 文件和每行设置的变量的跟踪信息。