» SelfLinux » Programmierung » Make » Abschnitt 3 SelfLinux-0.12.1
zurück   Startseite Kapitelanfang Inhaltsverzeichnis GFDL   weiter

SelfLinux-Logo
Dokument Make  Autor
 Formatierung
 GFDL
 

4 Suffix-Regeln

Wenn Sie eine Datei mit der Endung .c sehen, wissen Sie, dass es sich um eine C-Datei handelt. Vermutlich wissen Sie auch, dass Sie einen C-Compiler aufrufen müssen, um daraus eine Objekt-Datei mit der Endung .o zu generieren.

Über die Suffix-Regeln kann man make dieses Wissen, wie es aus einer .c-Datei eine .o-Datei machen soll, beibringen:

#
#   Suffix-Regeln fuer C-Programme
#

.SUFFIXES : .c .o .i

.c.o :
        $(CC) -c $<

.c.i :
        $(CC) -E $< > $@
    

Mit der Zeile .SUFFIXES gibt man dem make-Kommando bekannt, welche Endungen es kennen soll. Sollen außer den drei angegebenen Endungen .c, .o und .i die bereits bekannten Endungen weiter gelten, kann man $(SUFFIXES) noch auf der rechten Seite ergänzen.

Nach der Bekanntgabe der Endungen folgen die Suffix-Regeln: Die Regel .c.o gibt an, wie make aus einer .c-Datei eine .o-Datei machen soll, und die Regel .c.i besagt, wie das Ergebnis des Präprozessors in einer Datei mit der Endung .i landet.

Beispiel:

user@linux $ make love.i
gcc -E love.c > love.i

4.1 Null-Suffix-Regeln

Null-Suffix-Regeln sind daran erkennbar, dass die zweite Endung fehlt:

#   Null-Suffix-Regel

.c:
        $(CC) $< -o $@
     

Null-Suffix-Regeln kommen dann zum Einsatz, wenn direkt aus einer Quell-Datei ein ausführbares Programm ohne Datei-Endung erzeugt werden soll.

Beispiel:

user@linux $ make love
gcc love.c -o love

4.2 Eingebaute Suffix-Regeln

Viele Regeln hat make schon eingebaut, nicht nur für C und C++. Die Regeln und Makros können über

user@linux $ make -p -f /dev/null

ausgegeben werden. Wie man dabei sieht, gibt es auch für andere Sprachen bereits vordefinierte Regeln.

Endung Bedeutung
.c C-Source
.cc, .C, .cpp C++-Source
.f Fortran
.gz komprimierte Datei (gzip)
.h Header-Datei (C, C++)
.i Dateien nach dem Präprozessor-Lauf
.l lex-Dateien
.o Objekt-Dateien
.p Pascal-Dateien
.s Assembler-Dateien
.y yacc-Dateien
.Z komprimierte Dateien (compress)

4.3 Konflikt-Behandlung

Betrachten wir ein Makefile, das nur aus folgender Regel besteht:

children : mummy.o daddy.o
     

Dummerweise sind mehrere Suffix-Regeln definiert, wie eine .o-Datei erzeugt werden kann, zum Beispiel aus einer .c-Datei oder aus einer .cpp-Datei oder Datei mit anderer Endung. Wenn nur eine entsprechende .c-Datei da ist, ist alles klar. Aber was, wenn nicht? Dann wird die Such-Reihenfolge durch die SUFFIXES-Liste bestimmt:

.SUFFIXES: .o .c .cpp .f
     

Es wird zuerst nach einer .c-Regel gesucht (.o nach .o macht keinen Sinn), dann nach einer .cc-Regel und so fort.


4.4 Eigene Suffix-Regeln

Eigene Suffix-Regeln wird man dann einführen, wenn

  • die eingebauten Regeln nicht ausreichen,
  • man mit den eingebauten Regeln nicht einverstanden ist.


zurück   Seitenanfang Startseite Kapitelanfang Inhaltsverzeichnis GFDL   weiter