CMake: imprima todas las variables accesibles en un script

Resuelto Michael asked hace 12 años • 7 respuestas

Me pregunto si hay alguna manera de imprimir todas las variables accesibles en CMake. No me interesan las variables de CMake, como en la --help-variablesopción. Me refiero a las variables que definí o a las variables definidas por los scripts incluidos.

Actualmente estoy incluyendo:

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

Y esperaba poder imprimir todas las variables que están aquí, en lugar de tener que revisar todos los archivos y leer lo que estaba disponible; es posible que encuentre algunas variables que no conocía y que podrían ser útiles. Sería bueno ayudar al aprendizaje y al descubrimiento. Es estrictamente para depuración/desarrollo.

Esto es similar a la pregunta en Imprimir todas las variables locales accesibles al alcance actual en Lua , ¡pero para CMake!

¿Alguien ha hecho esto?

Michael avatar Feb 16 '12 00:02 Michael
Aceptado

Usando la get_cmake_propertyfunción, el siguiente bucle imprimirá todas las variables de CMake definidas y sus valores:

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

Esto también se puede incrustar en una función de conveniencia que, opcionalmente, puede usar una expresión regular para imprimir solo un subconjunto de variables con nombres coincidentes.

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

O, en una forma más compacta:

function(dump_cmake_variables)
    get_cmake_property(_variableNames VARIABLES)
    list (SORT _variableNames)
    foreach (_variableName ${_variableNames})
        if ((NOT DEFINED ARGV0) OR _variableName MATCHES ${ARGV0})
            message(STATUS "${_variableName}=${${_variableName}}")
        endif()
    endforeach()
endfunction()

Para imprimir variables de entorno, utilice el modo de comando de CMake :

execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "environment")
sakra avatar Feb 17 '2012 12:02 sakra

Otra forma es simplemente usar:

cmake -LAH

Desde la página de manual :

-L[A][H]

Enumere las variables almacenadas en caché no avanzadas.

La lista de variables de caché ejecutará CMake y enumerará todas las variables del caché de CMake que no estén marcadas como INTERNALo ADVANCED. Esto mostrará efectivamente la configuración actual de CMake [...].

Si Ase especifica, también mostrará variables avanzadas.

Si Hse especifica, también mostrará ayuda para cada variable.

jtsagata avatar Sep 16 '2013 23:09 jtsagata

ccmakees una buena opción interactiva para inspeccionar interactivamente variables almacenadas en caché ( option(o set( CACHE:

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

Otra forma de ver todas las variables internas de cmake es ejecutando cmake con la --trace-expandopción.

Esto le dará un seguimiento de todos los archivos .cmake ejecutados y las variables configuradas en cada línea.

Willem Hengeveld avatar Oct 11 '2020 14:10 Willem Hengeveld