CMake: stampa tutte le variabili accessibili in uno script


222

Mi chiedo se c'è un modo per stampare tutte le variabili accessibili in CMake. Non sono interessato alle variabili CMake - come --help-variablesnell'opzione. Sto parlando delle mie variabili che ho definito o delle variabili definite dagli script inclusi.

Attualmente sto includendo:

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

E speravo di poter semplicemente stampare tutte le variabili che sono qui, invece di dover esaminare tutti i file e leggere ciò che era disponibile - Potrei trovare alcune variabili che non conoscevo che potrebbero essere utili. Sarebbe utile aiutare l'apprendimento e la scoperta. È strettamente per il debug / sviluppo.

Questo è simile alla domanda in Stampa tutte le variabili locali accessibili allo scopo attuale in Lua , ma per CMake!

Qualcuno l'ha fatto?

Risposte:


368

Usando la get_cmake_propertyfunzione, il ciclo seguente stamperà tutte le variabili CMake definite e i loro valori:

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

Questo può anche essere incorporato in una funzione di convenienza che può facoltativamente utilizzare un'espressione regolare per stampare solo un sottoinsieme di variabili con nomi corrispondenti

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

Per stampare le variabili di ambiente, utilizzare la modalità di comando di CMake :

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

È uno snippet molto utile. Perché non stampa le variabili ENV che ho impostato sulla riga di comando?
IgorGanapolsky,

2
@Geremia puoi copiare questo blocco di codice nel file myfile.txt ed eseguire: cmake -P
myfile.txt

2
VARIABLESelenca solo "variabili definite nella directory corrente". cmake.org/cmake/help/latest/prop_dir/…
CivFan

1
Ho dovuto rimuovere il STATUSdal messagecomando per rendere visibile l'output.
Luator,

Non ha funzionato per me. tutto ciò che ho ottenuto sono variabili che iniziano con CMAKE_ *
C Johnson il

173

Un altro modo è semplicemente usare:

cmake -LAH

Dalla manpage :

-L[A][H]

Elencare le variabili memorizzate nella cache non avanzate.

Elenca le variabili della cache eseguirà CMake ed elenca tutte le variabili della cache CMake che non sono contrassegnate come INTERNALo ADVANCED. Ciò visualizzerà efficacemente le impostazioni correnti di CMake [...].

Se Aspecificato, verranno visualizzate anche le variabili avanzate.

Se Hspecificato, visualizzerà anche la guida per ciascuna variabile.


4
Fallo sulla tua directory di build
jtsagata,

5
Si noti che questo metodo NON stampa le variabili di sistema (WIN32, UNIX, APPLE, ecc.).
holocronweaver,

4
Questo non stampa tutte le librerie disponibili, solo quelle memorizzate nella cache.
rafalcieslak,

2
Questo non stampa tutte le variabili, solo quelle memorizzate nella cache. (FTFY rafa)
Qwertie,

9

ccmakeè una buona opzione interattiva per ispezionare in modo interattivo le variabili memorizzate nella cache ( option(o set( CACHE:

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


3
Strumento utile :) Tuttavia, le domande chiedono di stampare tutte le variabili .. ma questo rivelerà solo le variabili memorizzate nella cache.
OLL,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.