CMake: Imprimir todas as variáveis ​​acessíveis em um script


222

Gostaria de saber se existe uma maneira de imprimir todas as variáveis ​​acessíveis no CMake. Não estou interessado nas variáveis ​​do CMake - como na --help-variablesopção Estou falando das minhas variáveis ​​que defini ou das variáveis ​​definidas pelos scripts incluídos.

Atualmente, estou incluindo:

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

E eu esperava poder imprimir todas as variáveis ​​que estão aqui, em vez de precisar ler todos os arquivos e ler o que estava disponível - posso encontrar algumas variáveis ​​que eu não conhecia que possam ser úteis. Seria bom ajudar no aprendizado e na descoberta. É estritamente para depuração / desenvolvimento.

Isso é semelhante à pergunta em Imprimir todas as variáveis ​​locais acessíveis ao escopo atual em Lua , mas para o CMake!

Alguém já fez isso?

Respostas:


368

Usando a get_cmake_propertyfunção, o seguinte loop imprimirá todas as variáveis ​​CMake definidas e seus valores:

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

Isso também pode ser incorporado em uma função de conveniência, que pode opcionalmente usar uma expressão regular para imprimir apenas um subconjunto de variáveis ​​com nomes correspondentes

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

Para imprimir variáveis ​​de ambiente, use o modo de comando do CMake :

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

Esse é um trecho muito útil. Por que não imprime variáveis ENV que defini na linha de comando?
IgorGanapolsky

2
@ Geremia, você pode copiar esse bloco de código no arquivo myfile.txt e executar: cmake -P myfile.txt
Idok:

2
VARIABLESlista apenas "variáveis ​​definidas no diretório atual". cmake.org/cmake/help/latest/prop_dir/…
CivFan 4/17

1
Eu tinha que remover a STATUSpartir do messagecomando para a saída a ser visível.
luator

Não funcionou para mim. tudo o que consegui foram variáveis ​​começando com CMAKE_ *
C Johnson

173

Outra maneira é simplesmente usar:

cmake -LAH

Na página de manual :

-L[A][H]

Listar variáveis ​​em cache não avançadas.

Listar variáveis ​​de cache executará o CMake e listará todas as variáveis ​​do cache do CMake que não estão marcadas como INTERNALou ADVANCED. Isso exibirá efetivamente as configurações atuais do CMake [...].

Se Afor especificado, ele também exibirá variáveis ​​avançadas.

Se Hfor especificado, também exibirá ajuda para cada variável.


4
Faça isso no diretório de compilação
jtsagata

5
Observe que esse método NÃO imprime variáveis ​​de sistema (WIN32, UNIX, APPLE etc.).
holocronweaver

4
Isso não imprime todas as bibliotecas disponíveis, apenas as armazenadas em cache.
Rafalcieslak

2
Isso não imprime todas as variáveis, apenas as armazenadas em cache. (FTFY rafa)
Qwertie 30/11

9

ccmakeé uma boa opção interativa para inspecionar interativamente variáveis ​​em cache ( option(ou set( CACHE:

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


3
Ferramenta útil :) No entanto, as perguntas solicitam a impressão de todas as variáveis. Mas isso só revelará variáveis ​​em cache.
OLL
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.