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