SelfLinux Programmierung Make Abschnitt 3 | SelfLinux-0.13.0

| 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.