web-dev-qa-db-fra.com

CMake: Imprimez toutes les variables accessibles dans un script

Je me demande s'il existe un moyen d'imprimer toutes les variables accessibles dans CMake. Je ne m'intéresse pas aux variables CMake - comme à l'option --help-variables. Je parle de mes variables que j'ai définies ou des variables définies par les scripts inclus.

Je suis actuellement y compris

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

Et j'espérais pouvoir simplement imprimer toutes les variables qui sont ici, au lieu de devoir parcourir tous les fichiers et lire ce qui était disponible - il se peut que certaines variables que je ne connaissais pas puissent être utiles. Il serait bon d'aider l'apprentissage et la découverte. C'est strictement pour le débogage/développement.

Ceci est similaire à la question dans affiche toutes les variables locales accessibles au périmètre actuel en Lua, mais pour CMake!

Est-ce que quelqu'un a fait ça?

190
Michael

En utilisant la fonction get_cmake_property , la boucle suivante affichera toutes les variables CMake définies et leurs valeurs:

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

Cela peut également être intégré dans une fonction pratique qui peut éventuellement utiliser une expression régulière pour n’imprimer qu’un sous-ensemble de variables avec des noms correspondants.

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()

Pour imprimer les variables d'environnement, utilisez le mode de commande de CMake :

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

Une autre façon consiste simplement à utiliser:

cmake -LAH

De la page de manuel :

-L[A][H]

Répertorie les variables en cache non avancées.

Lister les variables du cache lancera CMake et listera toutes les variables du cache CMake qui ne sont pas marquées comme INTERNAL ou ADVANCED. Cela affichera efficacement les paramètres CMake actuels [...].

Si A est spécifié, les variables avancées seront également affichées.

Si H est spécifié, il affichera également l'aide pour chaque variable.

160
jtsagata

ccmake est une bonne option interactive pour inspecter de manière interactive les variables mises en cache (option( ou set( CACHE:

Sudo apt-get install cmake-curses-gui
mkdir build
cd build
cmake ..
ccmake ..