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?

Miguel
fuente

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")
sakra
fuente
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.

jtsagata
fuente
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 ..

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fuente
3
Herramienta útil :) Sin embargo, las preguntas piden imprimir todas las variables ... pero esto solo revelará las variables almacenadas en caché.
OLL