CMake: wydrukuj wszystkie dostępne zmienne w skrypcie

222

Zastanawiam się, czy istnieje sposób wydrukowania wszystkich dostępnych zmiennych w CMake. Nie interesują mnie zmienne CMake - jak w --help-variablesopcji. Mówię o moich zmiennych, które zdefiniowałem lub zmiennych zdefiniowanych przez dołączone skrypty.

Obecnie obejmuję:

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

Miałem nadzieję, że uda mi się po prostu wydrukować wszystkie zmienne, które tu są, zamiast przeglądać wszystkie pliki i czytać, co było dostępne - może się okazać, że niektóre zmienne, o których nie wiedziałem, mogą być przydatne. Dobrze byłoby pomóc w nauce i odkrywaniu. Służy wyłącznie do debugowania / programowania.

Jest to podobne do pytania w Drukuj wszystkie zmienne lokalne dostępne dla bieżącego zakresu w Lua , ale dla CMake!

Czy ktoś to zrobił?

Michael
źródło

Odpowiedzi:

368

Za pomocą get_cmake_propertyfunkcji następująca pętla wypisze wszystkie zdefiniowane zmienne CMake i ich wartości:

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

Może to być również osadzone w funkcji wygody, która może opcjonalnie użyć wyrażenia regularnego, aby wydrukować tylko podzbiór zmiennych o pasujących nazwach

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

Aby wydrukować zmienne środowiskowe, użyj trybu poleceń CMake :

execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "environment")
sakra
źródło
To bardzo przydatny fragment. Dlaczego nie wypisuje zmiennych ENV , które ustawiłem w wierszu poleceń?
IgorGanapolsky
2
@ Geremia możesz skopiować ten blok kodu do pliku myfile.txt i uruchomić: cmake -P myfile.txt
Idok
2
VARIABLESwyświetla tylko „zmienne zdefiniowane w bieżącym katalogu”. cmake.org/cmake/help/latest/prop_dir/…
CivFan
1
Musiałem usunąć polecenie STATUSz messagepolecenia, aby wynik był widoczny.
luator
Nie działało dla mnie. wszystko, co otrzymałem, to zmienne zaczynające się od CMAKE_ *
C Johnson
173

Innym sposobem jest po prostu użycie:

cmake -LAH

Z strony podręcznika :

-L[A][H]

Wyświetla listę niewykorzystanych zmiennych buforowanych.

Lista zmiennych pamięci podręcznej uruchomi CMake i wyświetli listę wszystkich zmiennych z pamięci podręcznej CMake, które nie są oznaczone jako INTERNALlub ADVANCED. Skutecznie wyświetli bieżące ustawienia CMake [...].

Jeśli Ajest określony, wyświetli również zmienne zaawansowane.

Jeśli H jest określony, wyświetli również pomoc dla każdej zmiennej.

jtsagata
źródło
4
Zrób to w swoim katalogu kompilacji
jtsagata,
5
Zauważ, że ta metoda NIE drukuje zmiennych systemowych (WIN32, UNIX, APPLE itp.).
holocronweaver
4
Nie drukuje to wszystkich dostępnych bibliotek, tylko te buforowane.
rafalcieslak
2
To nie drukuje wszystkich zmiennych, tylko te buforowane. (FTFY rafa)
Qwertie
9

ccmakejest dobrą interaktywną opcją do interaktywnej kontroli buforowanych zmiennych ( option(lub set( CACHE:

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

Ciro Santilli
źródło
3
Przydatne narzędzie :) Jednak pytania wymagają wydrukowania wszystkich zmiennych .. ale to ujawni tylko zmienne buforowane.
OLL