next up previous contents index
Next: Netzwerke Up: Programmerstellung und -übersetzung Previous: Hello world

make

 

Bei der Entwicklung eines Programmes, das aus mehr als einer Quelldatei  besteht, steht man vor dem Problem herauszufinden, welche Dateien  nach einer Modifikation neu übersetzt werden müssen. Das Werkzeug make wurde entworfen, um die Benutzerin  bei diesem Problem zu unterstützen, indem es die Beschreibungen der entsprechenden Beziehungen zwischen den einzelnen Dateien übernimmt [1].

Beim Aufruf bringt make die Zieldatei auf den neuesten Stand, falls diese von Dateien abhängt, die seit der letzten Modifikation des Ziels verändert wurden.

Die Beschreibung der Abhängigkeiten wird im Makefile festgehalten. Dort werden zentrale Änderungen vorgenommen, die alle zu übersetzenden Dateien betreffen.

Ein Beispiel:

beispiel: main.o beispiel.o
cc -o beispiel main.o beispiel.o

Die Zieldatei beispiel hängt von den Dateien main.o und beispiel.o ab. Falls eine dieser Dateien jünger als beispiel ist, wird die Übersetzung  in Gang gesetzt. Beispiele für wesentlich komplexere Makefiles werden in den Tutorien gezeigt.

Der Aufruf von make mit den entsprechenden Zielen wird einfach

$ make ziel
lauten. Da die Übersetzung eines Programmpaketes je nach Umfang und Größe des Quellcodes  ziemlich lange dauern kann und die Bildschirmausgabe  des Compilers  vielleicht über mehrere Seiten hinwegläuft, ist eventuell später eine entsprechende Fehlermeldung  nicht wiederzufinden. Deshalb wird meistens eine Umleitung der Standard-Ausgabe  und der Standard-Fehler  vorgenommen, so daß die Meldungen sowohl auf dem Bildschirm  zu sehen sind als auch in einer Datei  gespeichert werden:

$ make 2>&1 tex2html_wrap_inline4060 tee make.out

leitet stderr nach stdout  um und dieses wiederum über die Pipe  als stdin  an den Befehl  tee, der seine Eingabe in die Datei make.out schreibt (s. Anhang A.51).

Viele Programmpakete für Unix-Systeme  sind so portabel programmiert, daß in den Makefiles lediglich die Pfade  angepaßt und der Systemtyp angegeben werden müssen, um sie dann bequem ,,out of the box`` übersetzen zu können.


next up previous contents index
Next: Netzwerke Up: Programmerstellung und -übersetzung Previous: Hello world

Kai Altenfelder
Mon Dec 2 08:36:57 MET 1996