CMake: imprima todas las variables accesibles en un script
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-variables
opció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?
Usando la get_cmake_property
funció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")
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
INTERNAL
oADVANCED
. Esto mostrará efectivamente la configuración actual de CMake [...].Si
A
se especifica, también mostrará variables avanzadas.Si
H
se especifica, también mostrará ayuda para cada variable.
ccmake
es 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-expand
opción.
Esto le dará un seguimiento de todos los archivos .cmake ejecutados y las variables configuradas en cada línea.