Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 11 Funktionen
  gp 11.1 Was sind Funktionen?
  gp 11.2 Wozu Funktionen?
  gp 11.3 Definition von Funktionen
  gp 11.4 Funktionsaufruf
  gp 11.5 Funktionsdeklaration
  gp 11.6 Lokale Variablen
  gp 11.7 Globale Variablen
  gp 11.8 Statische Variablen
  gp 11.9 Schlüsselworte für Variablen – Speicherklassen
    gp 11.9.1 auto
    gp 11.9.2 extern
    gp 11.9.3 register
    gp 11.9.4 static
  gp 11.10 Typ-Qualifizierer
    gp 11.10.1 volatile
    gp 11.10.2 const
  gp 11.11 Geltungsbereich von Variablen
  gp 11.12 Speicherklassen-Spezifizierer für Funktionen
    gp 11.12.1 extern
    gp 11.12.2 static
    gp 11.12.3 volatile
  gp 11.13 Datenaustausch zwischen Funktionen
  gp 11.14 Wertübergabe an Funktionen (call-by-value)
  gp 11.15 Rückgabewert von Funktionen
  gp 11.16 Die Hauptfunktion main()
  gp 11.17 Rückgabewert beim Beenden eines Programms
  gp 11.18 Funktionen der Laufzeitbibliothek
  gp 11.19 Getrenntes Compilieren von Quelldateien
  gp 11.20 Rekursive Funktionen
    gp 11.20.1 Exkurs: Stack
    gp 11.20.2 Rekursionen und der Stack
    gp 11.20.3 Fakultät
    gp 11.20.4 Fibonacci-Zahlen
    gp 11.20.5 Größter gemeinsamer Teiler (GGT)


Galileo Computing - Zum Seitenanfang

11.19 Getrenntes Compilieren von Quelldateien  toptop

Für kleinere Programme, dessen 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:

gp  Editieren und compilieren dauern länger.
gp  Quelltext wird unübersichtlich und schwieriger zu verstehen.
gp  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 ein Beispiel zum getrennten Compilieren mit drei Programm-Modulen, die aus 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 compiliert und gelinkt werden müssen. Zuerst wird dazu der Schalter -c verwendet. Das bewirkt, dass die einzelnen Dateien zwar übersetzt werden, dabei aber nicht der Linkerlauf 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 compiliert 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 Programmname 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 Compilieren 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 Compilier-Zeiten.

Natürlich versteht es sich von selbst, dass sich in einer der Dateien die main()-Funktion befinden muss. Hier der ganze Vorgang noch einmal bildlich:

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 11.4   Übersetzen mehrerer Quelldateien


Hinweis   In der Praxis wird gewöhnlich dieser Vorgang komfortabel in einer Makefile verpackt und mit make übersetzt (gebaut).


 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de