10 - 2.5 IPC + Signale: Makefile [ID:23871]
49 von 49 angezeigt

Als nächstes blicken wir nochmal zurück auf Make und schauen, wie wir unsere Makefiles

noch dahingehend erweitern können, dass sie kürzer und prägnanter werden.

Dazu schauen wir uns einige der Makros an, die Make zur Verfügung stellt.

Hier sind einige, die recht praktisch sind und die ihr in euren Makefiles einbauen solltet.

Das erste Makro ist $add. $add evaluiert jeweils zu dem Namen des Targets, in dem das Makro

eingebaut ist. In dem Beispiel haben wir eine Regel, die das Target test baut. Vom Namen

des Targets sind durch einen Doppelpunkt die Abhängigkeiten getrennt. In dem Fall ist

die Abhängigkeit test.c. In der Zeile darunter befindet sich der Befehl, der ausgeführt

wird, wenn das Target gebaut werden soll. Und in dem Befehl kann das Makro $add verwendet

werden. Da es zu dem Namen des Targets evaluiert, wird es hier verwendet, um dem GCC den Namen

der Ausgabe-Datei mitzuteilen, indem es als Argument an die Option binstrich o gesetzt

wird.

Das zweite Makro ist $, gefolgt von einem kleiner Zeichen. Dieses Makro evaluiert zu

der ersten Abhängigkeit, die beschrieben steht. In diesem Beispiel haben wir das Target test.o

mit den Abhängigkeiten test.c und test.h. Wenn wir nun also das Makro $, dann evaluiert

dieses zu der ersten Abhängigkeit, in diesem Fall test.c.

Und das dritte Makro ist $, bzw. $, gefolgt von dem kleinen Dächlein. Dieses Makro expandiert

zu allen Abhängigkeiten, die genannt werden. Das heißt im folgenden Beispiel, indem das

Target test gebaut wird, abhängig von den Dateien test.o und func.o, evaluiert das Makro

zu den Strings test.o und func.o. Es werden also alle Abhängigkeiten mit in den Befehl

übernommen.

So alleine nehmen wir die gerade genannten Makros nur ein kleines bisschen Schreibarbeit

ab. Interessant wird es, wenn wir die Makros nun mit den Musterregeln bzw. den Patternregeln

kombinieren. Mit einer Patternregel können wir einen Platzhalter für einen Namen gefolgt

von einem Prä oder Suffix einfügen. Das Muster im Namen des Targets wird dann auf die Abhängigkeiten

übertragen.

Am besten lässt sich dies am Beispiel erklären. Wir haben hier eine Regel, die das Target

%.o beschreibt. Dabei bezeichnet das % hier den Platzhalter für das Muster.

In der Abhängigkeit beziehen wir uns auf eine Datei %.c. Was nun bei der Ausführung

des Makefiles geschieht, ist, dass Make prüft, ob eine Datei mit dem Suffix.o gebaut werden

soll. Falls dies der Fall ist, dann trifft diese Regel zu. Soll zum Beispiel eine Datei

test.o gebaut werden, wird erkannt, dass das Target das Suffix.o beinhaltet und die Patternregel

greift.

Hier wird nun das Muster auf den Namen des Targets test.o angewandt und es wird zu test.

Abhängig davon wird die Abhängigkeit abgeleitet. Das heißt %.c wird zu test.c.

Wenn anschließend der Befehl ausgeführt wird, können die zuvor genannten Makros verwendet

werden. In unserem Beispiel wird das Makro $, expandiert zu der ersten Abhängigkeit.

Die erste Abhängigkeit ist hier wieder die Patternregel %.c, was im konkreten Fall zu

einem Test.c wird.

Ergänzend zu den Patternregeln kann man auch Regeln ohne Kommando beschreiben. Diese

bestehen dann nur aus dem Target und den Abhängigkeiten jeweils durch einen Doppelpunkt getrennt.

Damit können die Abhängigkeiten der Patternregeln überschrieben und damit konkretisiert werden.

In diesem Beispiel definieren wir uns eine Abhängigkeit für das Target test.o und sagen,

dass dies abhängt von den Dateien test.c, test.h und func.h.

Wenn wir nun die beiden Beispiele in einem Makewell kombinieren und test.o bauen wollen,

begreifen die Abhängigkeiten auf die Datei test.c, test.h und func.h, aber der Befehl

zur Erzeugung des Targets wird von der Patternregel abgeleitet.

Möchte man eine Patternregel überschreiben, dann kann man dies machen, indem man eine

konkrete Regel, bestehend aus dem Target, den Abhängigkeiten und dem Kommando, spezifiziert.

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:04:33 Min

Aufnahmedatum

2020-11-15

Hochgeladen am

2020-11-15 19:37:59

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen