Der Befehl make

make-featured

In diesem Beitrag lernen Sie den Befehl make sowie die dazugehörigen sogenannten Makefiles kennen. Unter UNIX / Linux wird make als Werkzeug zum Auflösen der Abhängigkeiten in Build-Prozessen und dem automatischen Rekompilieren von aktualisierten Teilen eingesetzt.  Es existieren verschiedene Implementierungen, welche jedoch nicht vollständig kompatibel zueinander sind - dieser Beitrag konzentriert sich daher nur auf die GNU-Implementierung von make.

Installation

make ist im gleichnamigen Paket "make" enthalten und wird folgendermaßen mithilfe des Paketmanagers apt installiert:

apt-get install make

Nähere Informationen zur Paketverwaltung mit apt erfahren Sie in unserem dedizierten Beitrag dazu.

Allgemeine Syntax

Die allgemeine Syntax von make lautet folgendermaßen:

make [Optionen] [Targets]

Makefiles

Makefiles beschreiben mithilfe von Regeln, wie sogenannte "Targets" (Ziele) erstellt werden können. Meist sind Targets Namen von Dateien, die von einem Programm generiert werden - beispielsweise ausführbare Dateien. Alternativ können Targets jedoch auch auszuführende Aktionen, wie etwa das "Aufräumen" ("clean"), beschreiben. Ein Target kann dabei auch von anderen Targets oder Dateien abhängen. Beispielhaft könnte ein Target, in Rahmen dessen ein Programm kompiliert werden soll, etwa den zu kompilierenden Quellcode als Abhängigkeit haben.

Eine einfache Regel hat den folgenden Aufbau:

[Target]: [Abhängigkeit(en)]

          [Rezept]

          ...

Der Name des Targets steht direkt am Anfang der Regel. Hinter einem Doppelpunkt ":" können dann die Abhängigkeiten dieses Targets, jeweils mit Leerzeichen voneinander getrennt, aufgelistet werden. Das Rezept beschreibt schließlich die von make auszuführenden Aktionen in Form von einem oder mehreren Befehlen. Die Befehle können auf einer Zeile, oder untereinander auf mehreren Zeilen stehen. Wichtig ist jedoch, dass jede Rezept-Zeile mit einem Tab beginnen muss.

Der Dateiname einer Makefile sollte stets "Makefile" oder "makefile" sein. Sobald eine geeignete Makefile im Arbeitsverzeichnis bereitsteht, können alle nötigen Neukompilierungen bzw. Aktualisierungen von Targets (nach Änderungen an Quelldateien) mithilfe des folgenden Befehlsaufrufs durchgeführt werden:

make

Das make-Programm entscheidet anhand der Makefile und der letzten Änderungszeitpunkte der Dateien, welche Dateien aktualisiert werden müssen. Ein Target wird aktualisiert, wenn mindestens eine Abhängigkeit sich seit der letzten Aktualisierung geändert hat, oder wenn das Target noch nicht existiert. Die in der Makefile hinterlegten Befehle werden dann zum Aktualisieren der ausgewählten Targets ausgeführt.

Wichtige Optionen

Einige der wichtigsten Optionen von make werden im Folgenden kurz vorgestellt.

-B - Alle Targets aktualisieren

Die Option -B führt unbedingt zur Aktualisierung aller Targets:

make -B [Targets]

-f - Makefile spezifizieren

Mithilfe der Option -f ist die Übergabe einer Datei, die als Makefile verwendet werden soll, möglich:

make -f [Datei] [Targets]

-q - "Question"-Modus

Wird die Option -q verwendet, so führt make keine Befehle aus und schreibt auch nichts in den Standard-Output stdout. Stattdessen gibt make lediglich den Exit-Code 0 zurück, wenn alle spezifizierten Targets aktuell sind, andernfalls einen Exit-Code ungleich 0 (siehe auch Exit-Codes):

make -q [Targets]

Exit-Codes

Der folgenden Tabelle sind die Exit-Codes sowie die jeweils mit ihnen angezeigten Status des Befehls make zu entnehmen:

Exit-Code

Status

0

Alle Makefiles konnten erfolgreich geparst werden und keines der aktualisierten Targets ist fehlgeschlagen.

1

Wird ausgegeben, wenn die Option -q verwendet wurde und make festgestellt hat, dass ein Target aktualisiert werden muss.

2

Ein Fehler ist aufgetreten

Abonniere JETZT unseren Newsletter!


Verpasse nie wieder neue Beiträge und exklusive Insider-Only-Inhalte!

Joel Benseler

Click Here to Leave a Comment Below

Leave a Comment: