Verwenden von CMake mit GNU Make: Wie kann ich die genauen Befehle anzeigen?

281

Ich benutze CMake mit GNU Make und möchte alle Befehle genau sehen (zum Beispiel wie der Compiler ausgeführt wird, alle Flags usw.).

GNU machen hat --debug, aber es scheint nicht so hilfreich zu sein, gibt es noch andere Möglichkeiten? Stellt CMake zusätzliche Flags im generierten Makefile zum Debuggen bereit?

Nils
quelle
2
Oder, um einige Suchbegriffe hinzuzufügen: So verbergen Sie vollständige, ausführlich ausgeführte Befehlszeilen und zeigen nur eine knappe, prozentuale Farbausgabe an.
Ulidtko
Nicht-CMake-Obermenge: stackoverflow.com/questions/5820303/…
Ciro Santilli 5 冠状 病 六四 事件 5
mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
Parasrish

Antworten:

369

Wenn Sie make ausführen, fügen Sie hinzu VERBOSE=1, um die vollständige Befehlsausgabe anzuzeigen. Zum Beispiel:

cmake .
make VERBOSE=1

Oder Sie können -DCMAKE_VERBOSE_MAKEFILE:BOOL=ONdem Befehl cmake eine permanente ausführliche Befehlsausgabe aus den generierten Makefiles hinzufügen .

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

Um eine möglicherweise weniger interessante Ausgabe zu reduzieren, möchten Sie möglicherweise die folgenden Optionen verwenden. Die Option CMAKE_RULE_MESSAGES=OFFentfernt Zeilen wie [33%] Gebäude C-Objekt ... , während --no-print-directorymake das aktuelle Verzeichnis nicht ausdrucken soll, um Zeilen wie make[1]: Entering directoryund herauszufiltern make[1]: Leaving directory.

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory
richq
quelle
12
Diese Lösungen machen es zu ausführlich, drucken viel CMake und machen Interna, die nicht interessant sind. Gibt es eine Möglichkeit, nur Kompilierungs- und Verknüpfungsbefehle anzuzeigen (dh was normalerweise für Debugging-Probleme relevant ist)? Vielleicht wird nur der fehlgeschlagene Befehl angezeigt.
Tronic
Der Top-Google - Treffer empfiehlt „ wenn Sie nur die g ++ Befehlszeilen sehen wollen, sollten Sie nutzen grep & Co. - wenn möglich - in Verbindung mit ausführlichen Makefiles“ . Vielleicht haben Entwickler mit viel Erfahrung mit cmake andere Ratschläge.
Trevor Boyd Smith
7
Übrigens, wenn Sie sich auf einer Plattform befinden, die dies unterstützt, cmake -GNinja . ; ninja -vwird eine sehr schöne ausführliche Ausgabe mit minimalem Flaum angezeigt.
Richq
9
Single line ...cmake --build . -- VERBOSE=1
letmaik
Anscheinend muss ich mit einer neueren cmake-Version arbeiten, da nach dem Ausführen von cmake keine Makefiles in meinem Build-Verzeichnis gefunden wurden ...
DrumM
80

Es ist praktisch, die Option in der CMakeLists.txtDatei wie folgt festzulegen :

set(CMAKE_VERBOSE_MAKEFILE ON)
James Hirschorn
quelle
3
Bitte tun Sie dies nicht für Ihre eigenen Projekte. Möglicherweise möchten nicht alle Benutzer Ihre ausführliche Build-Ausgabe sehen. Erzwingen Sie dies nicht jedem, der Ihre Bibliothek konsumiert. CMAKE_VERBOSE_MAKEFILE sollte standardmäßig deaktiviert sein und die Auswahl eines Benutzers, falls erforderlich, für Debugging-Zwecke.
Ela782
3
So? Sie können es jederzeit als Cache-Variable hinzufügen, wenn Sie mehrere Entwickler haben und ihnen eine Auswahl geben möchten. Aber ja, in einer Release-Version eines Projekts sollte es standardmäßig deaktiviert sein.
James Hirschorn
1
Dies ist eine großartige Option, wenn Sie qt.io QtCreator verwenden, da cmake von der GUI aufgerufen wird. Danke dir!
Grant Rostig
9

Oder exportieren Sie einfach die VERBOSE-Umgebungsvariable wie folgt in die Shell: export VERBOSE=1

makerj
quelle
8

Wenn Sie die CMake-GUI verwenden, wechseln Sie in die erweiterte Ansicht, und die Option heißt CMAKE_VERBOSE_MAKEFILE.

SteveL
quelle
Wie kann ich diese Option in Textdateien festlegen, ohne die GUI zu verwenden?
Osgx
4

Ich habe etwas Ähnliches versucht, um sicherzustellen, dass die -ggdbFlagge vorhanden ist.

Rufen Sie make in einem sauberen Verzeichnis auf und suchen Sie das gesuchte Flag. Ich suche debugeher als ggdbich nur schreiben würde.

make VERBOSE=1 | grep debug

Das -ggdbFlag war so dunkel, dass nur die Kompilierungsbefehle auftauchten.

Alexander Griffith
quelle