Usando o CMake com o GNU Make: Como posso ver os comandos exatos?

281

Eu uso o CMake com o GNU Make e gostaria de ver todos os comandos exatamente (por exemplo, como o compilador é executado, todos os sinalizadores etc.).

O GNU make tem --debug, mas não parece ser tão útil, existem outras opções? O CMake fornece sinalizadores adicionais no Makefile gerado para fins de depuração?

Nils
fonte
2
Ou, para adicionar alguns termos de pesquisa, como ocultar linhas de comando executadas completas e detalhadas e mostrar apenas a porcentagem de saída silenciosa concisa.
Ulidtko 17/05
Não CMake superconjunto: stackoverflow.com/questions/5820303/...
Ciro Santilli郝海东冠状病六四事件法轮功
mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
parasrish

Respostas:

369

Ao executar o make, adicione VERBOSE=1para ver a saída completa do comando. Por exemplo:

cmake .
make VERBOSE=1

Ou você pode adicionar -DCMAKE_VERBOSE_MAKEFILE:BOOL=ONao comando cmake para saída de comando detalhado permanente a partir dos Makefiles gerados.

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

Para reduzir uma saída possivelmente menos interessante, você pode usar as seguintes opções. A opção CMAKE_RULE_MESSAGES=OFFremove linhas como [33%] do objeto Building C ... , enquanto o --no-print-directorytell faz para não imprimir o diretório atual, filtrando as linhas como make[1]: Entering directorye make[1]: Leaving directory.

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory
richq
fonte
12
Essas soluções tornam muito detalhada, imprimindo muito CMake e criando componentes internos que não são interessantes. Existe alguma maneira de mostrar apenas comandos de compilação e link (ou seja, o que geralmente é relevante para problemas de depuração). Talvez até exiba apenas o comando que falhou.
Tronic
O principal hit do google recomenda "se você quiser ver apenas as linhas de comando do g ++, use grep & Co. - se possível - em conexão com os Makefiles detalhados" . Talvez desenvolvedores com muita experiência em cmake tenham outros conselhos.
Trevor Boyd Smith
7
A propósito, se você estiver em uma plataforma compatível, ela cmake -GNinja . ; ninja -vmostra uma saída detalhada muito agradável com o mínimo de cotão.
richq
10
Linha única ...cmake --build . -- VERBOSE=1
letmaik
Aparentemente, eu devo estar trabalhando com uma versão mais recente cmake, porque não há makefiles encontrados no meu diretório de compilação após a execução cmake ...
Drumm
80

É conveniente definir a opção no CMakeLists.txtarquivo como:

set(CMAKE_VERBOSE_MAKEFILE ON)
James Hirschorn
fonte
3
Por favor, não faça isso para seus próprios projetos. Nem todos os usuários podem querer ver sua saída detalhada da compilação. Não force isso em todo mundo que consome sua biblioteca. CMAKE_VERBOSE_MAKEFILE deve estar desativado por padrão e a escolha do usuário, se necessário, para fins de depuração.
Ela782
3
Assim? Você sempre pode adicioná-lo como uma variável de cache se tiver vários desenvolvedores e desejar dar uma opção a eles. Mas sim, em uma versão de lançamento de um projeto, você deve desativá-lo por padrão.
James Hirschorn 24/03
1
Essa é uma ótima opção ao usar o qt.io QtCreator porque o cmake é chamado pela GUI. Obrigado!
Grant Rostig 11/02/19
9

Ou simplesmente exporte a variável de ambiente VERBOSE no shell da seguinte maneira: export VERBOSE=1

makerj
fonte
8

Se você usar a GUI do CMake, troque para a visualização avançada e a opção será chamada CMAKE_VERBOSE_MAKEFILE.

SteveL
fonte
Como posso definir essa opção em arquivos de texto, sem usar a GUI?
Osgx
4

Eu estava tentando algo semelhante para garantir que a -ggdbbandeira estivesse presente.

Ligue para make em um diretório limpo e grep a bandeira que você está procurando. Procurando em debugvez de ggdbescrever.

make VERBOSE=1 | grep debug

A -ggdbbandeira era obscura o suficiente para que apenas os comandos de compilação aparecessem.

Alexander Griffith
fonte