9.19 Getrenntes Kompilieren von Quelldateien 

Für kleinere Programme, deren kompletter Quelltext in einer Datei geschrieben wurde, können Sie beim Kompilieren weiterhin wie bisher verfahren. Bei zunehmend größeren Programmen könnten jedoch folgende Probleme auftreten:
- Das Editieren und das Kompilieren dauern länger.
- Der Quelltext wird unübersichtlich und schwieriger zu verstehen.
- Teamarbeit wird erschwert.
Ich werde dieses Beispiel anhand des GNU-Compilers gcc demonstrieren. Mit anderen Compilern dürfte dieser Vorgang ähnlich ablaufen. Bei Entwicklungsumgebungen müssen Sie dabei ein neues Projekt anlegen und die einzelnen Quelldateien zum Projekt hinzufügen. Im Folgenden sehen Sie ein Beispiel zum getrennten Kompilieren mit drei Programm-Modulen, die zu Demonstrationszwecken sehr kurz gehalten sind:
/*main.c*/ #include <stdio.h> #include <stdlib.h> extern void modul1(void); extern void modul2(void); int main(void) { modul1(); modul2(); return EXIT_SUCCESS; } /*modul1.c*/ void modul1(void) { printf("Ich bin das Modul 1\n"); } /*modul2.c*/ void modul2(void) { printf("Ich bin Modul 2\n"); }
Jetzt haben Sie drei Dateien, die zusammen kompiliert und gelinkt werden müssen. Zuerst wird dazu der Schalter -c verwendet. Das bewirkt, dass die einzelnen Dateien zwar übersetzt werden, der Linkerlauf dabei aber nicht gestartet wird:
gcc -c main.c gcc -c modul1.c gcc -c modul2.c
Jetzt befinden sich drei Objektdateien (*.obj oder *.o) im Verzeichnis, in dem kompiliert wurde. Diese drei Objektdateien können Sie mit folgender Anweisung zu einer ausführbaren Datei linken:
gcc main.o modul1.o modul2.o
Jetzt befindet sich im Verzeichnis die Datei a.out. Dies ist die ausführbare Datei, das fertige Programm. Der Name a.out wird standardmäßig vom Compiler verwendet. Mit dem Schalter -o können Sie auch einen eigenen Namen vorgeben:
gcc -o myapp main.o modul1.o modul2.o
Sollten Sie gcc unter Windows verwenden, fügen Sie beim Programmnamen myapp die Extension *.exe hinzu (myapp.exe). Wenn Sie jetzt die Datei main.c ändern müssen, brauchen Sie nur diese neu zu übersetzen:
gcc -c main.c
und können anschließend die einzelnen Dateien wieder zusammenlinken:
gcc main.o modul1.o modul2.o
Das nochmalige Kompilieren der anderen Dateien entfällt, da deren Code nicht geändert wurde und deshalb die unveränderten *.o-Dateien neu verlinkt werden können. Bei großen und sehr großen Projekten führt dieses Vorgehen zu deutlich kürzeren Kompilierzeiten.
Natürlich versteht es sich von selbst, dass sich in einer der Dateien die main()-Funktion befinden muss. Abbildung 9.4 zeigt den ganzen Vorgang noch einmal grafisch.
Abbildung 9.4 Übersetzen mehrerer Quelldateien
Hinweis |
In der Praxis wird gewöhnlich dieser Vorgang komfortabel in ein Makefile verpackt und mit make übersetzt (gebaut). |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.