CMake: роздрукуйте всі доступні змінні в сценарії


222

Мені цікаво, чи є спосіб роздрукувати всі доступні змінні в CMake. Мене не цікавлять змінні CMake - як у --help-variablesваріанті. Я говорю про свої змінні, які я визначив, або змінні, визначені включеними сценаріями.

Я зараз включаю:

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

І я сподівався, що мені вдасться просто роздрукувати всі змінні, які є тут, замість того, щоб переглядати всі файли та читати, що є в наявності - я можу знайти деякі змінні, про які я не знав, що можуть бути корисними. Було б добре допомогти навчанню та відкриттю. Це суворо для налагодження / розвитку.

Це схоже на питання в " Друк" всіх локальних змінних, доступних для поточної області в Lua , але для CMake!

Хтось робив це?

Відповіді:


368

Використовуючи get_cmake_propertyфункцію, наступний цикл роздрукує всі визначені змінні CMake та їх значення:

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

Це також може бути вбудовано у зручну функцію, яка може додатково використовувати регулярний вираз для друку лише підмножини змінних з відповідними іменами

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

Для друку змінних середовища використовуйте командний режим CMake :

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

Це дуже корисний фрагмент. Чому він не виводить змінні ENV, які я встановив у командному рядку?
ІгорГанапольський

2
@Geremia ви можете скопіювати цей код коду, щоб записати myfile.txt і запустити: cmake -P myfile.txt
Idok

2
VARIABLESперелічує лише "змінні, визначені в поточному каталозі." cmake.org/cmake/help/latest/prop_dir/…
CivFan

1
Я повинен був видалити STATUSз messageкоманди для виведення , щоб бути видимим.
луатор

Не працювало для мене. все, що я отримав, це змінні, починаючи з CMAKE_ *
C Johnson,

173

Ще один спосіб - просто використовувати:

cmake -LAH

З сторінки керівництва :

-L[A][H]

Перерахуйте невдосконалені кешовані змінні.

Змінні кеш-списку запускають CMake та перелічують усі змінні з кеша CMake, які не позначені як INTERNALабо ADVANCED. Це ефективно відобразить поточні налаштування CMake [...].

Якщо Aвказано, то він буде відображати також розширені змінні.

Якщо Hвказано, він також відображатиме довідку для кожної змінної.


4
Зробіть це у своєму каталозі збірки
jtsagata

5
Зауважте, що цей метод НЕ друкує системні змінні (WIN32, UNIX, APPLE тощо).
holocronweaver

4
Це не виводить усіх доступних бібліотек, лише кешованих.
rafalcieslak

2
Це не виводить усіх змінних, лише кешовані. (FTFY rafa)
Qwertie

9

ccmakeє хорошим інтерактивним варіантом інтерактивного огляду кешованих змінних ( option(або set( CACHE:

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


3
Корисний інструмент :) Тим не менш, питання вимагає роздрукувати всі змінні .. але це виявить лише кешовані змінні.
OLL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.