Usare CMake con GNU Make: Come posso vedere i comandi esatti?


281

Uso CMake con GNU Make e vorrei vedere esattamente tutti i comandi (ad esempio come viene eseguito il compilatore, tutti i flag, ecc.).

GNU make ha --debug, ma non sembra essere così utile ci sono altre opzioni? CMake fornisce flag aggiuntivi nel Makefile generato a scopo di debug?


2
Oppure, per aggiungere alcuni termini di ricerca, Come nascondere le righe di comando complete, dettagliate e mostrare solo l'output colorato in percentuale ridotta.
Ulidtko,


mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
Parassita,

Risposte:


369

Quando esegui make, aggiungi VERBOSE=1per vedere l'output del comando completo. Per esempio:

cmake .
make VERBOSE=1

Oppure puoi aggiungere -DCMAKE_VERBOSE_MAKEFILE:BOOL=ONal comando cmake per l'output del comando dettagliato permanente dai Makefile generati.

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

Per ridurre alcuni output forse meno interessanti, ti consigliamo di utilizzare le seguenti opzioni. L'opzione CMAKE_RULE_MESSAGES=OFFrimuove le righe come [33%] Building C object ... , mentre --no-print-directoryindica a make di non stampare la directory corrente filtrando le righe come make[1]: Entering directorye make[1]: Leaving directory.

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory

12
Queste soluzioni lo rendono troppo prolisso, stampando molto CMake e realizzando interni che non sono interessanti. Esiste un modo per mostrare solo i comandi di compilazione e collegamento (ovvero ciò che di solito è rilevante per i problemi di debug). Forse anche solo visualizzare il comando non riuscito.
Tronic,

Il primo hit di google raccomanda "se vuoi vedere solo le righe di comando di g ++, dovresti usare grep & Co. - se possibile - in connessione con Makefile dettagliati" . Forse gli sviluppatori con molta esperienza con cmake hanno altri consigli.
Trevor Boyd Smith,

7
A proposito, se ti trovi su una piattaforma che lo supporta cmake -GNinja . ; ninja -vmostra un output dettagliato molto bello con lanugine minima.
richq

11
Linea singola ...cmake --build . -- VERBOSE=1
letmaik,

Apparentemente, devo lavorare con una nuova versione di cmake, perché non ci sono makefile trovati nella mia directory di build dopo aver eseguito cmake ...
DrumM,

80

È conveniente impostare l'opzione nel CMakeLists.txtfile come:

set(CMAKE_VERBOSE_MAKEFILE ON)

3
Per favore, non farlo per i tuoi progetti. Non tutti gli utenti potrebbero voler visualizzare l'output dettagliato della build. Non forzarlo su tutti coloro che consumano la tua biblioteca. CMAKE_VERBOSE_MAKEFILE dovrebbe essere disattivato per impostazione predefinita e la scelta di un utente, se necessario, per scopi di debug.
Ela782

3
Così? Puoi sempre aggiungerlo come variabile di cache se hai più sviluppatori e vuoi dare loro una scelta. Ma sì, in una versione di un progetto dovresti averlo disattivato per impostazione predefinita.
James Hirschorn,

1
Questa è un'ottima opzione quando si utilizza qt.io QtCreator perché cmake viene chiamato dalla GUI. Grazie!
Grant Rostig,

9

O semplicemente esporta la variabile d'ambiente VERBOSE sulla shell in questo modo: export VERBOSE=1


8

Se si utilizza la GUI di CMake, passare alla vista avanzata e quindi l'opzione si chiama CMAKE_VERBOSE_MAKEFILE.


Come posso impostare questa opzione nei file di testo, senza usare la GUI?
osgx,

4

Stavo provando qualcosa di simile per assicurarmi che la -ggdbbandiera fosse presente.

Chiama make in una directory pulita e grep il flag che stai cercando. In cerca debugpiuttosto che ggdbscriverei.

make VERBOSE=1 | grep debug

La -ggdbbandiera era abbastanza oscura da far apparire solo i comandi di compilazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.