gcc: Eine einzelne Quelldatei (*.c) übersetzen.
1a.  Für kleinere Projekte sind große Entwicklungsumgebungen wie KDevelop oder Anjuta eher ungeeignet bzw. überdimensioniert. Hierbei kommen Sie mit einfachen Editoren und der Kommandozeile häufig schneller ans Ziel. Sind Sie z. B. mit einem entfernten Rechner über SSH oder über OpenVPN verbunden, stehen Ihnen auch keine solche Entwicklungsumgebungen zur Verfügung. Gerne wird hierbei auf Kommandozeilen-Editoren wie bspw. vi, pico (wie in der folgenden Abbildung zu sehen) oder emacs zurückgegriffen um den Quellcode einzugeben.

gcc: Eine einzelne Quelldatei (*.c) übersetzen.

1b.  Für Einsteiger ist die Verwendung solcher Kommandozeilen-Editoren zunächst eher gewöhnungsbedürftigt. Natürlich können Sie auch auf die einfachen (Text-)Editoren des entsprechenden Fenstermanager (GNOME oder KDE) zurückgreifen. In der Abbildung sehen Sie z. B. den Editor gedit (gewöhnlich unter GNOME behaimatet) mit dem Hallo-Welt-Programm.

gcc: Eine einzelne Quelldatei (*.c) übersetzen.

2.  Egal, welchen Editor Sie den nun verwenden, dass Kompilieren und Linken eines Quelltext zu einem ausführbaren Programm ist immer gleich. In der folgenden Abbildung wird aus dem Quelltext hallo.c ein ausführbares Programm namens hallo erstellt. In diesem Beispiel hätte natürlich auch einfach nur das Flag -o (gcc -o hallo hallo.cpp) gerreicht. Ich persönlich verwende mittlerweile gerne zur Sicherheit mehrere Flags wie hier mit -pedantic, -Wall und -ansi. Wollen Sie außerdem ein Programm explizit im C89- bzw. C99-Standard übersetzen, müssen Sie das Flag -std (bspw.: -std=c89 oder -std=c99) verwenden. Die Bedeutung der einzelnen Compiler-Flags und noch einige mehr, finden Sie in der Tabelle hinter der folgenden Abbildung.

gcc: Eine einzelne Quelldatei (*.c) übersetzen.

Option Bedeutung
-o (Output) Wollen Sie, dass der Compiler die ausführbare Datei anders benennt als a.out, dann sollten Sie mit dieser Option den Namen der Ausgabedatei angeben.
-c (Compile) Kompilieren ohne zu linken.
-Dname=value (Define) Definiert ein Präprozessor-Makro mit dem Namen name und dem Wert value in der Kommandozeile.
-Idirname (Include-directory) Fügt dirname zur Liste der Include-Dateien hinzu, in denen danach gesucht werden soll.
-Ldirname (Library) Fügt dirname zur Liste der Verzeichnisse hinzu, in denen nach Bibliotheksdateien gesucht werden soll (-L gilt für .so und .a).
-static Es werden nur statische Bibliotheken zum Linken verwendet.
-lname (Library) Gibt die Bibliothek an, die hinzugelinkt werden soll. Hier die Bibliothek name (wird eine .so-Datei gefunden, wird diese benutzt, andernfalls .a, sollte diese existieren).
-O (Optimize) Den kompilierten Quellcode optimieren.
-On (Optimize) Wie das Flag -O, nur kann mit n die Optimierungsstufe angegeben werden. Mindestens ist 1 und maximal 3 möglich. Mit der Angabe von 0 wird die Optimierung ausgeschaltet. Es sind auch Level oberhalb 3 möglich, die haben aber keinen Effekt.
-g (Debug) Fügt Standard-Debug-Informationen zum Debuggen hinzu.
-ggdb (Debug gdb) Fügt Debug-Informationen hinzu, die nur der Debugger gdb versteht (auch hier gibt es wieder verschiedene Stufen; wer in der Welt der vielen -g-Möglichkeiten einfach nur »alles« will, gibt am besten -ggdb3 an; da hat man alles (laut Manpage).
-ansi Erlaubt nur ANSI C++-konforme Konstrukte.
-pedantic Gibt alle Warnungen aus, die vom ANSI C++-Standard gefordert werden.
-pedantic-errors Gibt alle Fehler aus, die vom ANSI C++-Standard gefordert werden.
-Wall Aktiviert allgemeine sinnvolle Warnungen, die vom g++-Compiler unterstützt werden.
-p, -pg (Profiling) Fügt dem Objektcode Profiling-Informationen hinzu, die vom Profiler gprof ausgewertet werden können. -pg gibt Profiling-Informationen für gprof aus.
-v Zeigt alle Schritte und Kommandos in der Kommandozeile an, die der Compiler gerade ausführt (siehe da: cpp, cc1, as und ld).