CMake: imprima todas las variables accesibles en un script


222

Me pregunto si hay una manera de imprimir todas las variables accesibles en CMake. No estoy interesado en las variables CMake, como en la --help-variablesopción. Estoy hablando de mis variables que definí, o 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; puedo encontrar algunas variables que no conocía que pueden 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?

Respuestas:


368

Usando la get_cmake_propertyfunción, el siguiente ciclo imprimirá todas las variables 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 conveniente 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()

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

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

Ese es un fragmento muy útil. ¿Por qué no imprime las variables ENV que configuré en la línea de comandos?
IgorGanapolsky

2
@Geremia, puede copiar este bloque de código en el archivo myfile.txt y ejecutar: cmake -P myfile.txt
Idok

2
VARIABLESenumera solo "variables definidas en el directorio actual". cmake.org/cmake/help/latest/prop_dir/…
CivFan

1
Tuve que eliminar el STATUSdel messagecomando para que la salida fuera visible.
luator

No funciono para mi. todo lo que obtuve fueron variables que comenzaron con CMAKE_ *
C Johnson

173

Otra forma es simplemente usar:

cmake -LAH

Desde la página del manual :

-L[A][H]

Lista de variables en caché no avanzadas.

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

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

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


44
Haga esto en su directorio de compilación
jtsagata

55
Tenga en cuenta que este método NO imprime variables del sistema (WIN32, UNIX, APPLE, etc.).
holocronweaver

44
Esto no imprime todas las bibliotecas disponibles, solo las almacenadas en caché.
rafalcieslak

2
Esto no imprime todas las variables, solo las almacenadas en caché. (FTFY rafa)
Qwertie

9

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

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


3
Herramienta útil :) Sin embargo, las preguntas piden imprimir todas las variables ... pero esto solo revelará las variables almacenadas en caché.
OLL
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.