next up previous
Next: Formulieren von Abhängigkeiten in Up: Schreiben von Makefiles Previous: Festlegen eines make-Programmes

Abhängigkeiten

make überprüft Abhängigkeiten, die in einem Makefile angegeben sind und kann damit Befehle ausführen, um neue Programme zu erzeugen.

Um zum Beispiel das Objektfile program.o zu erzeugen wird zumindest eine Quelldatei program.c benötigt, welche unter Umständen eine Headerdatei program.h includiert. program.o ist also abhängig von den beiden Dateien program.c und program.h.

Solche Abhängigkeiten können sehr gut in Abhängigkeisgraphen dargestellt werden.

\includegraphics{depgraph.eps}

Dieser Graph stellt die Abhängigkeiten für ein Programm dar, das aus fünf Quelldateien aufgebaut ist. Ganz oben steht das Zielprogramm project1, die Linien, die davon nach unten ausgehen, stellen die Abhängigkeiten zu anderen Dateien dar. Um z.B. main.o zu erstellen, werden die Quelldateien data.h, io.h und main.c benötigt.

Angenommen das gesamte Programm ist fertig kompiliert, und danach wird erkannt, daß in der Datei io.h noch ein kleiner Fehler ist. io.h wird neu editiert, um den Fehler zu beheben. Der nächste Graph stellt dar, welche Dateien neu erstellt werden müssen.

\includegraphics{dephow.eps}

io.c wurde geändert. io.o ist abhängig von io.c, es muß also nocheinmal kompiliert werden, und auch project1 muß neu erstellt werden, da es von io.o abhängig ist. Alle anderen Komponenten des Programmes können so belassen werden, wie sie nach der ersten Kompilation gewesen sind.

Die Abhängigkeiten, die im Graph dargestellt werden, müssen im Makefile angegeben werden. Das make-Kommando überprüft die Modifikationszeiten der Dateien, und jedesmal, wenn ein File neuer ist, als etwas das davon abhängig ist, werden die Regeln ausgeführt, um die abhängigen Dateien upzudaten.

Das Makefile zum obigen Graphen wird etwa so aussehen:

project1: data.o main.o io.o
 <tab>  cc data.o main.o io.o -o project1
	
data.o: data.c data.h
 <tab>  cc -c data.c
	
main.o: data.h io.h main.c
 <tab>  cc -c main.c
	
io.o: io.h io.c
 <tab>  cc -c io.c

Wenn io.c geändert wurde, erkennt make, daß io.c neuer ist als io.o (das von io.c abhängig ist) und führt dann den angegeben Befehl aus cc -c io.c, das io.o erzeugt. Dann wird noch cc data.o main.o io.o -o project1 ausgeführt, um auch project1 zu aktualisieren.



 
next up previous
Next: Formulieren von Abhängigkeiten in Up: Schreiben von Makefiles Previous: Festlegen eines make-Programmes Mail to: Oliver Schönbrunner
Programmieren unter UNIX