make - GNU Make-Dienstprogramm zur Verwaltung von Programm-Gruppen
SYNOPSIS
make [OPTION]... [TARGET]...
DESCRIPTION
Das Dienstprogramm make bestimmt automatisch, welche Teile eines großen Programms neu kompiliert werden müssen, und gibt die entsprechenden Befehle zur Neukompilierung aus. Das Handbuch beschreibt die GNU-Implementierung von make, die von Richard Stallman und Roland McGrath geschrieben und derzeit von Paul Smith gewartet wird. Unsere Beispiele zeigen C-Programme, da diese sehr verbreitet sind, aber Sie können make mit jeder Programmiersprache verwenden, deren Compiler über einen Shell-Befehl ausgeführt werden kann. Tatsächlich ist make nicht auf Programme beschränkt. Sie können es verwenden, um jede Aufgabe zu beschreiben, bei der einige Dateien automatisch aus anderen Dateien aktualisiert werden müssen, wenn sich diese ändern.
Um die Verwendung von make vorzubereiten, müssen Sie eine Datei namens Makefile erstellen, die die Beziehungen zwischen den Dateien in Ihrem Programm beschreibt und Befehle zum Aktualisieren jeder Datei bereitstellt. In einem Programm wird normalerweise die ausführbare Datei aus Objektdateien aktualisiert, die wiederum durch Kompilieren von Quelldateien erstellt werden.
Sobald eine geeignete Makefile-Datei vorhanden ist, reicht der folgende einfache Shell-Befehl jedes Mal, wenn Sie einige Quelldateien ändern, aus, um alle erforderlichen Neukompilierungen durchzuführen:
make
`make` verwendet die Beschreibung in der `Makefile`-Datei und die letzten Änderungszeiten der Dateien, um zu entscheiden, welche der Dateien aktualisiert werden müssen. Für jede dieser Dateien gibt es die in der `Makefile`-Datei aufgezeichneten Befehle aus.
`make` führt Befehle in der `Makefile`-Datei aus, um ein oder mehrere Ziele zu aktualisieren, wobei ein Ziel typischerweise ein Programm ist. Wenn keine Option `-f` vorhanden ist, sucht `make` nach den `Makefile`-Dateien `GNUmakefile`, `makefile` und `Makefile`, in dieser Reihenfolge.
Normalerweise sollten Sie Ihre Makefile-Datei entweder makefile oder Makefile nennen. (Wir empfehlen Makefile, da diese in der Verzeichnisauflistung deutlich am Anfang steht, direkt neben anderen wichtigen Dateien wie README.) Der zuerst überprüfte Name, GNUmakefile, wird nicht für die meisten Makefile-Dateien empfohlen. Sie sollten diesen Namen verwenden, wenn Sie eine Makefile-Datei haben, die spezifisch für GNU Make ist und von anderen Versionen von make nicht verstanden wird. Wenn makefile - ist, wird die Standardeingabe gelesen.
`make` aktualisiert ein Ziel, wenn es von Voraussetzungsdateien abhängt, die seit der letzten Aktualisierung des Ziels geändert wurden, oder wenn das Ziel nicht vorhanden ist.
OPTIONS
-b, -m
Diese Optionen werden zur Kompatibilität mit anderen Versionen von make ignoriert.
-B, --always-make
Alle Ziele bedingungslos erstellen.
-C dir, --directory=dir
Vor dem Lesen der Makefile-Dateien oder dem Ausführen anderer Aktionen in das Verzeichnis dir wechseln. Wenn mehrere Optionen -C angegeben werden, wird jede relativ zur vorherigen interpretiert: -C / -C etc. entspricht -C /etc. Dies wird normalerweise bei rekursiven Aufrufen von make verwendet.
-d Gibt zusätzliche Debugging-Informationen zusätzlich zur normalen Verarbeitung aus. Die Debugging-Informationen geben an, welche Dateien für die Neuerstellung in Betracht gezogen werden, welche Dateizeitpunkte verglichen werden und mit welchen Ergebnissen, welche Dateien tatsächlich neu erstellt werden müssen, welche impliziten Regeln berücksichtigt und angewendet werden – alles Interessante darüber, wie `make` entscheidet, was zu tun ist.
--debug[=FLAGS]
Gibt zusätzliche Debugging-Informationen zusätzlich zur normalen Verarbeitung aus. Wenn die FLAGS weggelassen werden, ist das Verhalten dasselbe wie bei der Angabe von -d. FLAGS können beliebige oder alle der folgenden Namen sein, durch Komma oder Leerzeichen getrennt. Nur der erste Buchstabe ist wichtig: der Rest kann weggelassen werden: all für alle Debugging-Ausgaben (entspricht der Verwendung von -d), basic für grundlegendes Debugging, verbose für ausführlicheres grundlegendes Debugging, implicit zum Anzeigen von Suchvorgängen für implizite Regeln, jobs für Details zur Aufruf von Befehlen, makefile zum Debuggen beim Neuerstellen von Makefiles, print zeigt alle ausgeführten Rezepte an, auch wenn sie stillschweigend sind, und why zeigt den Grund, warum make beschlossen hat, jedes Ziel neu zu erstellen. Verwenden Sie none, um alle vorherigen Debugging-Flags zu deaktivieren.
-e, --environment-overrides
Gibt Variablen, die aus der Umgebung übernommen wurden, Vorrang vor Variablen aus Makefiles.
-E string, --eval string
Interpretiert den String mit der eval-Funktion, bevor Makefiles geparst werden.
-f file, --file=file, --makefile=FILE
Verwendet die Datei als Makefile.
-i, --ignore-errors
Ignoriert alle Fehler in Befehlen, die zum Neuerstellen von Dateien ausgeführt werden.
-I dir, --include-dir=dir
Gibt ein Verzeichnis dir an, in dem nach eingebundenen Makefiles gesucht werden soll. Wenn mehrere -I-Optionen verwendet werden, um mehrere Verzeichnisse anzugeben, werden die Verzeichnisse in der angegebenen Reihenfolge durchsucht. Anders als bei den Argumenten anderer Flags von make können Verzeichnisse, die mit -I-Flags angegeben werden, direkt nach dem Flag stehen: -Idir ist zulässig, ebenso wie -I dir. Diese Syntax ist zur Kompatibilität mit dem -I-Flag des C-Präprozessors zulässig.
-j [jobs], --jobs[=jobs]
Gibt die Anzahl der gleichzeitig auszuführenden Jobs (Befehle) an. Wenn es mehr als eine -j-Option gibt, ist die letzte wirksam. Wenn die -j-Option ohne Argument angegeben wird, beschränkt make nicht die Anzahl der gleichzeitig auszuführenden Jobs.
--jobserver-style=style
Der zu verwendende Stil des Jobservers. Der Stil kann fifo, pipe oder sem (nur Windows) sein.
-k, --keep-going
Setzt die Verarbeitung nach einem Fehler so weit wie möglich fort. Während das fehlgeschlagene Ziel und die davon abhängigen Ziele nicht neu erstellt werden können, können die anderen Abhängigkeiten dieser Ziele trotzdem verarbeitet werden.
-l [load], --load-average[=load]
Gibt an, dass keine neuen Jobs (Befehle) gestartet werden sollen, wenn andere Jobs ausgeführt werden und die durchschnittliche Systemlast mindestens load (eine Gleitkommazahl) beträgt. Ohne Argument wird ein vorheriges Lastlimit entfernt.
-L, --check-symlink-times
Verwende die aktuellste Änderungszeit zwischen Symlinks und Ziel.
-n, --just-print, --dry-run, --recon
Gib die Befehle aus, die ausgeführt würden, aber führe sie nicht tatsächlich aus (mit bestimmten Ausnahmen).
-o Datei, --old-file=Datei, --assume-old=Datei
Erstelle die Datei Datei nicht neu, auch wenn sie älter ist als ihre Abhängigkeiten, und erstelle auch nichts, was durch Änderungen in Datei verursacht wird. Im Wesentlichen wird die Datei als sehr alt behandelt und ihre Regeln werden ignoriert.
-O[Typ], --output-sync[=Typ]
Wenn mehrere Jobs parallel mit -j ausgeführt werden, stelle sicher, dass die Ausgabe jedes Jobs zusammengefasst wird, anstatt mit der Ausgabe anderer Jobs vermischt zu werden. Wenn Typ nicht angegeben oder auf Ziel gesetzt ist, wird die Ausgabe des gesamten Rezeptes für jedes Ziel zusammengefasst. Wenn Typ auf Zeile gesetzt ist, wird die Ausgabe jeder Befehlszeile innerhalb eines Rezeptes zusammengefasst. Wenn Typ auf rekursiv gesetzt ist, wird die Ausgabe einer gesamten rekursiven Ausführung von make zusammengefasst. Wenn Typ auf keine gesetzt ist, wird die Ausgabesynchronisierung deaktiviert.
-p, --print-data-base
Gib die Datenbank (Regeln und Variablenwerte) aus, die sich aus dem Einlesen der Makefiles ergibt; führe sie dann wie gewohnt oder wie anderweitig angegeben aus. Dies gibt auch die Versionsinformationen aus, die mit der Option -v (siehe unten) angezeigt werden. Um die Datenbank auszugeben, ohne zu versuchen, Dateien neu zu erstellen, verwende make -p -f/dev/null.
-q, --question
``Fragemodus''. Führe keine Befehle aus oder gib etwas aus; gib stattdessen einen Exit-Status zurück, der Null ist, wenn die angegebenen Ziele bereits aktuell sind, andernfalls ungleich Null.
-r, --no-builtin-rules
Eliminiere die Verwendung der eingebauten impliziten Regeln. Lösche auch die Standardliste der Suffixe für Suffixregeln.
-R, --no-builtin-variables
Definiere keine eingebauten Variablen.
-s, --silent, --quiet
Leiser Betrieb; gib die Befehle nicht aus, während sie ausgeführt werden.
--no-silent
Mache die Wirkung der Option -s rückgängig.
-S, --no-keep-going, --stop
Mache die Wirkung der Option -k rückgängig.
-t, --touch
Ändere Dateien (markiere sie als aktuell, ohne sie tatsächlich zu ändern), anstatt ihre Befehle auszuführen. Dies wird verwendet, um vorzutäuschen, dass die Befehle ausgeführt wurden, um zukünftige Aufrufe von make zu täuschen.
--trace
Informationen über die Verarbeitung jedes Ziels werden ausgegeben (warum das Ziel neu erstellt wird und welche Befehle ausgeführt werden, um es neu zu erstellen).
-v, --version
Gib die Version des make-Programms zusammen mit einem Copyright, einer Liste der Autoren und einem Hinweis aus, dass keine Garantie übernommen wird.
-w, --print-directory
Gib eine Nachricht aus, die das Arbeitsverzeichnis vor und nach anderen Verarbeitungsschritten enthält. Dies kann nützlich sein, um Fehler in komplizierten Verschachtelungen rekursiver make-Befehle aufzuspüren.
--no-print-directory
Schalte -w aus, auch wenn es implizit eingeschaltet wurde.
--shuffle[=MODUS]
Aktiviere das Mischen der Reihenfolge von Zielen und Abhängigkeiten. MODUS ist einer von: keine, um den Mischmodus zu deaktivieren, zufällig, um Abhängigkeiten in zufälliger Reihenfolge anzuordnen, umgekehrt, um Abhängigkeiten in umgekehrter Reihenfolge zu betrachten, oder eine ganze Zahl
-W file, --what-if=file, --new-file=file, --assume-new=file
Simuliert, dass die Zieldatei gerade geändert wurde. Bei Verwendung mit der -n-Option wird angezeigt,
was passieren würde, wenn Sie diese Datei ändern würden. Ohne die -n-Option ist es fast so,
als ob Sie zuerst den Befehl touch für die angegebene Datei ausführen und dann make ausführen würden,
mit dem Unterschied, dass die Änderungszeit nur in der Vorstellung von make geändert wird.
--warn-undefined-variables
Warnt, wenn auf eine undefinierte Variable Bezug genommen wird.
EXIT STATUS
GNU Make gibt den Status 0 zurück, wenn alle Makefiles erfolgreich geparst wurden und keine der erstellten Ziele fehlgeschlagen ist. Ein Status von 1 wird zurückgegeben, wenn die -q-Option verwendet wurde und make feststellt, dass ein Ziel neu erstellt werden muss. Ein Status von 2 wird zurückgegeben, wenn Fehler aufgetreten sind.
SIEHE AUCH
Die vollständige Dokumentation für make wird als Texinfo-Handbuch gepflegt. Wenn die Programme info und make korrekt auf Ihrem System installiert sind, sollte der Befehl
info make
Ihnen Zugriff auf das vollständige Handbuch gewähren.
FEHLER
Siehe das Kapitel „Probleme und Fehler“ im GNU Make-Handbuch.
AUTOR
Diese Handbuchseite wurde von Dennis Morse von der Stanford University beigetragen. Weitere Aktualisierungen wurden von Mike Frysinger beigetragen. Sie wurde von Roland McGrath überarbeitet. Gepflegt von Paul Smith.
COPYRIGHT
Copyright © 1992-1993, 1996-2023 Free Software Foundation, Inc. Diese Datei ist Teil von GNU Make.
GNU Make ist freie Software; Sie können sie weiterverbreiten und/oder ändern, und zwar unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wurde; entweder Version 3 der Lizenz oder (nach Ihrer Wahl) jede spätere Version.
GNU Make wird in der Hoffnung verbreitet, dass es nützlich sein wird, aber OHNE JEGLICHE GARANTIE; ohne die implizite Garantie der MARKTGÄNGIGKEIT oder der EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU General Public License für weitere Details.
Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben. Wenn nicht, siehe https://www.gnu.org/licenses/.