GCC Optionen · 5 min read · Jan 22, 2026
Ungewöhnliche, aber nützliche GCC-Befehlszeilenoptionen
Software-Tools bieten in der Regel mehrere Funktionen an, aber - wie die meisten von Ihnen zustimmen werden - werden nicht alle Funktionen von jedem genutzt. Allgemein gesagt, ist daran nichts falsch, da jeder Benutzer seine eigenen Anforderungen hat und die Tools nur in diesem Bereich nutzt. Es ist jedoch immer gut, die Tools, die Sie verwenden, weiter zu erkunden, da Sie nie wissen, wann eine ihrer Funktionen nützlich sein könnte und Ihnen dabei hilft, etwas von Ihrer wertvollen Zeit zu sparen.
Ein Beispiel: Compiler. Ein guter Compiler für Programmiersprachen bietet immer eine Fülle von Optionen, aber Benutzer kennen und verwenden in der Regel nur eine begrenzte Menge. Insbesondere, wenn Sie ein C-Entwickler sind und Linux als Ihre Entwicklungsplattform verwenden, ist es sehr wahrscheinlich, dass Sie den gcc-Compiler verwenden, der eine endlose Liste von Befehlszeilenoptionen bietet.
Wussten Sie, dass Sie gcc bitten können, die Ausgabe in jeder Phase des Kompilierungsprozesses zu speichern, wenn Sie möchten? Wissen Sie, dass die Option -Wall, die Sie zur Generierung von Warnungen verwenden, nicht einige spezifische Warnungen abdeckt? Es gibt viele Befehlszeilenoptionen von gcc, die nicht häufig verwendet werden, aber in bestimmten Szenarien äußerst nützlich sein können, zum Beispiel beim Debuggen des Codes.
In diesem Artikel werden wir einige solcher Optionen behandeln, alle erforderlichen Details anbieten und sie durch leicht verständliche Beispiele erklären, wo immer dies notwendig ist.
Aber bevor wir fortfahren, beachten Sie bitte, dass alle Beispiele, Befehle und Anweisungen, die in diesem Tutorial erwähnt werden, auf Ubuntu 16.04 LTS getestet wurden und die verwendete gcc-Version 5.4.0 ist.
Sehen Sie die Zwischenausgabe während jeder Kompilierungsphase
Wussten Sie, dass Ihr C-Code, wenn Sie ihn mit dem gcc-Compiler kompilieren, grob gesagt insgesamt vier Phasen durchläuft? Diese sind die Vorverarbeitung, die Kompilierung, die Assemblierung und das Verlinken. Nach jeder Phase erzeugt gcc eine temporäre Ausgabedatei, die an die nächste Phase übergeben wird. Diese sind alles temporäre Dateien, die erzeugt werden, und daher sehen wir sie nicht - alles, was wir sehen, ist, dass wir den Kompilierungsbefehl ausgegeben haben und er das Binär-/Ausführungsprogramm erzeugt, das wir ausführen können.
Aber nehmen wir an, während des Debuggens gibt es die Anforderung zu sehen, wie der Code nach, sagen wir, der Vorverarbeitungsphase aussah. Was würden Sie tun? Nun, das Gute ist, dass der gcc-Compiler eine Befehlszeilenoption bietet, die Sie in Ihrem Standardkompilierungsbefehl verwenden können, und Sie erhalten diese Zwischenfiles, die vom Compiler sonst gelöscht werden. Die Option, von der wir sprechen, ist -save-temps.
Hier ist, was die gcc-Man-Seite über diese Option sagt:
Speichern Sie die üblichen "temporären" Zwischenfiles dauerhaft; legen Sie sie im aktuellen Verzeichnis ab und benennen Sie sie basierend auf der Quelldatei. Somit erzeugt das Kompilieren von foo.c mit -c -save-temps die Dateien foo.i und foo.s sowie foo.o. Dies erstellt eine vorverarbeitete foo.i-Ausgabedatei, obwohl der Compiler jetzt normalerweise einen integrierten Vorprozessor verwendet.
Wenn in Kombination mit der -x-Befehlszeilenoption verwendet, ist -save-temps klug genug, um zu vermeiden, dass eine Eingangsquelldatei mit derselben Erweiterung wie eine Zwischenfile überschrieben wird. Die entsprechende Zwischenfile kann erhalten werden, indem die Quelldatei umbenannt wird, bevor -save-temps verwendet wird.Im Folgenden finden Sie einen Beispielbefehl, der Ihnen eine Vorstellung davon gibt, wie Sie diese Option verwenden können:
gcc -Wall -save-temps test.c -o test-execUnd so habe ich überprüft, dass alle Zwischenfiles tatsächlich nach der Ausführung des oben genannten Befehls erzeugt wurden:

Wie Sie im obigen Screenshot sehen können, wurden die Dateien test.i, test.s und test.o durch die Option -save-temps erzeugt. Diese Dateien entsprechen den Phasen der Vorverarbeitung, der Kompilierung und des Verlinkens.
Machen Sie Ihren Code bereit für Debugging und Profiling
Es gibt spezielle Tools, mit denen Sie Ihren Quellcode debuggen und profilieren können. Zum Beispiel wird gdb für Debugging-Zwecke verwendet, während gprof ein beliebtes Tool für Profiling-Zwecke ist. Aber wissen Sie, dass es spezifische Befehlszeilenoptionen gibt, die gcc anbietet, um Ihren Code sowohl für Debugging als auch für Profiling bereit zu machen?
Lassen Sie uns mit dem Debugging beginnen. Um gdb für das Debugging von Code verwenden zu können, müssen Sie Ihren Code mit der Befehlszeilenoption -g kompilieren, die der gcc-Compiler bereitstellt. Diese Option ermöglicht es gcc im Grunde, Debugging-Informationen zu erzeugen, die von gdb benötigt werden, um Ihr Programm erfolgreich zu debuggen.
Falls Sie planen, diese Option zu verwenden, wird empfohlen, die Details, die die gcc-Man-Seite zu dieser Option bietet, zu lesen - einige davon können in bestimmten Fällen entscheidend sein. Zum Beispiel ist hier ein Auszug aus der Man-Seite:
GCC erlaubt Ihnen, -g mit -O zu verwenden. Die Abkürzungen, die von optimiertem Code genommen werden, können gelegentlich überraschende Ergebnisse liefern: Einige Variablen, die Sie deklariert haben, existieren möglicherweise überhaupt nicht; der Kontrollfluss kann kurzzeitig dorthin gehen, wo Sie es nicht erwartet haben; einige Anweisungen werden möglicherweise nicht ausgeführt, weil sie konstante Ergebnisse berechnen oder ihre Werte bereits vorliegen; einige Anweisungen können an anderen Stellen ausgeführt werden, weil sie aus Schleifen heraus verschoben wurden.
Dennoch ist es möglich, optimierte Ausgaben zu debuggen. Das macht es sinnvoll, den Optimierer für Programme zu verwenden, die möglicherweise Fehler enthalten.Nicht nur gdb, das Kompilieren Ihres Codes mit der Option -g öffnet auch die Möglichkeit, das Memcheck-Tool von Valgrind in vollem Umfang zu nutzen. Für diejenigen, die es nicht wissen, wird Memcheck von Programmierern verwendet, um nach Speicherlecks (falls vorhanden) in ihrem Code zu suchen. Sie können mehr über dieses Tool hier erfahren.
Weiter geht’s, um gprof für das Profiling von Code verwenden zu können, müssen Sie Ihren Code mit der Befehlszeilenoption -pg kompilieren. Es ermöglicht gcc, zusätzlichen Code zu generieren, um Profiling-Informationen zu schreiben, die von gprof für die Codeanalyse benötigt werden. “Sie müssen diese Option verwenden, wenn Sie die Quelldateien kompilieren, über die Sie Daten erhalten möchten, und Sie müssen sie auch beim Verlinken verwenden”, sagt die gcc-Man-Seite. Um mehr darüber zu erfahren, wie Sie Code-Profiling mit gprof durchführen, gehen Sie zu diesem speziellen Tutorial auf unserer Website.
Hinweis: Die Verwendung der Optionen -g und -pg ist ähnlich der Art und Weise, wie die Option -save-temps im vorherigen Abschnitt verwendet wurde.
Fazit
Es sei denn, Sie sind ein gcc-Profi, ich bin mir sicher, dass Sie mit diesem Artikel etwas Neues gelernt haben. Probieren Sie diese Optionen aus und sehen Sie, wie sie funktionieren. In der Zwischenzeit warten Sie auf den nächsten Teil dieser Tutorialreihe, in dem wir weitere interessante und nützliche Befehlszeilenoptionen von gcc besprechen werden.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.