FC = /usr/convex/fc
FFLAGS = -O2 -pa
INCLUDE =
Diese Variablen können dann an beliebiger Stelle im Makefile in der Form
$(FC) benutzt werden. Man kann sie auch erst beim Aufruf von make
definieren, z.B.:
make FC=/usr/local/gnu/fc linalg
Diese Definition überschreibt eine im Makefile vorhandene. Außerdem
können Kommentarzeilen eingefügt werden, die mit # beginnen.
Zielname: Abhaengigkeiten
<TAB>Aktion1
.
.
<TAB>AktionN
wobei weitere Aktionszeilen folgen können. Zu beachten ist, daß
Aktionszeilen mit einem
main.o: $(INCLUDE) main.f
$(FC) $(FFLAGS) -c main.f
an, daß das ''Ziel'' (File) main.o neu erstellt werden muß, wenn sich das
File main.f oder ein mögliches Include-File geändert haben. Die zweite
Zeile gibt an, was in einem solchen Fall zu tun ist, nämlich neu
kompilieren. Es ist auch möglich, daß das Ziel von Files abhängt, die
quasi als Zwischenziele ebenfalls im Makefile angegeben sind. Diese werden
dann zunächst überprüft und ggf. neu erstellt. Etwa im Beispiel
linalg: $(OBJECTS)
$(FC) $(OBJECTS) $(LIBS) -o $@ $(LFLAGS)
enthalte die Variable OBJECTS die Liste aller Objekt-Dateien, aus denen das
Programm linalg bestehen soll. Um linalg auf den neuesten Stand zu bringen,
müssen also zuerst alle Object-Files, deren Source-Files sich geändert
haben oder die überhaupt noch nicht vorhanden sind, neu erzeugt werden,
wobei entsprechende Makefile-Einträge wie oben für main.o verwendet
werden. Erst dann wird der angegebene Link-Schritt ausgeführt. LFLAGS und
LIBS stehen dabei für vorher definierte Variable, die spezielle
Link-Optionen oder Libraries enthalten, die Variable $@ ist eine Abkürzung
für den Namen des Ziels, hier also für linalg.
.SUFFIXES: .o .f
Dann kann man die eigentlichen Regeln definieren, etwa:
.f.o:
/usr/convex/fc $(FFLAGS) -c $*.f
Die 1. Zeile gibt an, daß die folgenden Aktionszeilen (bis zur nächsten
Leerzeile) benutzt werden sollen, um aus .f-Files .o-Files zu erzeugen.
Die Aktionszeilen haben die gleiche Form wie sonst, allerdings gibt es in
Regeln zusätzliche Variable. $Eine nützliche Option von make ist ''-n''. Damit gibt make alle Kommandos aus, die es jetzt absetzen würde, ohne sie aber auszuführen. Das ist vor allem dann nützlich, wenn man Besonderheiten in seinem Makefile ausprobiert (wie eigene Regeln). Weitere Optionen und Möglichkeiten von make kann man dem Handbuch entnehmen.
Zum Schluß noch ein Beispiel, das zeigt, daß man mit make nicht nur kompilieren kann:
clean:
-/bin/rm *.o
-/bin/rm *~
Nach ``make clean'' werden immer die angegebenen Aufräum-Kommandos
ausgeführt. ''-'' am Anfang einer Aktionszeile bewirkt, daß make mit der
nächsten Zeile weiter macht, wenn eine Zeile einen Fehler meldet. (rm
gibt z.B. einen Fehler zurück, wenn kein File gelöscht wird.)
![]()