CMake: распечатать все доступные переменные в скрипте
Мне интересно, есть ли способ распечатать все доступные переменные в CMake. Меня не интересуют переменные CMake - как в опции --help-variables
. Я говорю о моих переменных, которые я определил, или переменных, определенных включенными сценариями.
В настоящее время я в том числе:
INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityCXX.cmake)
И я надеялся, что смогу просто распечатать все переменные, которые есть здесь, вместо того, чтобы просматривать все файлы и читать то, что было доступно - я могу найти некоторые переменные, о которых я не знал, которые могут быть полезны, Было бы хорошо, чтобы помочь обучению & открытие. это строго для отладки/разработки.
Это похоже на вопрос в Вывести все локальные переменные, доступные для текущей области в Lua, но для CMake!
Кто-нибудь делал это?
Ответы
Ответ 1
Используя функцию 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 command mode:
execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "environment")
Ответ 2
Другой способ - просто использовать:
cmake -LAH
С справочной страницы:
-L[A][H]
List non-advanced cached variables.
Список переменных кэша запустит CMake и выведет список всех переменных из кэша CMake, которые не помечены как INTERNAL
или ADVANCED
. Это эффективно отобразит текущие настройки CMake [...].
Если указано A
, то на нем также будут отображаться дополнительные переменные.
Если указан H
, он также будет отображать справку для каждой переменной.
Ответ 3
ccmake
- это эффективная интерактивная опция для интерактивного просмотра кэшированных переменных (option(
или set( CACHE
:
sudo apt-get install cmake-curses-gui
mkdir build
cd build
cmake ..
ccmake ..
![ohmjl.png]()