2012-02-15 6 views
145

Мне интересно, есть ли способ распечатать все доступные переменные в CMAKE. Меня не интересуют переменные CMAKE - как в опции -help-variables. Я говорю о моих переменных, которые я определил, или переменных, определяемых включенными скриптами.CMAKE: распечатать все доступные переменные в скрипте

Я в настоящее время в том числе

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

и надеялся, что я мог бы просто напечатать все переменные, которые здесь, вместо того, чтобы пройти через все файлы и читать то, что было доступно - я может найти некоторые переменные, о которых я не знал, что может быть полезно. Было бы полезно помочь в обучении &. Это строго для отладки/разработки.

похожее на вопрос в Print all local variables accessible to the current scope in Lua, но для cmake!

Кто-нибудь это сделал?

ответ

236

Использование функции get_cmake_property следующий цикл напечатает все переменные CMake определены и их значения:

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

Чтобы напечатать переменные окружения с помощью CMake-х command mode:

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

Ссылка выше ссылки на get_property и не get_cmake_property – craffael

+0

@craffael Link фиксирована. Спасибо. – sakra

+0

Это очень полезный фрагмент. Почему он не распечатывает ** переменные ENV **, которые я установил в командной строке? –

134

Другой способ заключается просто в использовании :

cmake -LAH 

От: manpage:

-L[A][H]

Список не продвинутых кэшированные переменные.

Перечислимые переменные кэша запускают CMake и перечисляют все переменные из кэша CMake, которые не отмечены как INTERNAL или ADVANCED. Это позволит эффективно отображать текущие настройки CMake [...].

Если указано A, то он отобразит также расширенные переменные.

Если указано H, он также отобразит справку для каждой переменной.

+3

Сделайте это в каталоге сборки – jtsagata

+3

Обратите внимание, что этот метод НЕ печатает системные переменные (WIN32, UNIX, APPLE и т. Д.). – holocronweaver

+4

Это не распечатывает все доступные библиотеки, а только кешированные. – rafalcieslak

5

ccmake хороший интерактивный вариант в интерактивном режиме проверять кэшированные переменные (option( или set(CACHE:

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

+0

Полезный инструмент :) Тем не менее, вопросы требуют распечатать все переменные .. но это будет показывать только кэшированные переменные. – OLL

Смежные вопросы