MAKE(1) Dienstprogramme fur Benutzer MAKE(1) BEZEICHNUNG make - GNU-Make-Dienstprogramm zur Verwaltung von Programmgruppen UBERSICHT make [OPTION] [ZIEL] BESCHREIBUNG Das Dienstprogramm make bestimmt automatisch, welche Teile eines grossen Programms neu kompiliert werden mussen und gibt die Befehle zur Neukompilierung aus. Das Handbuch beschreibt die GNU-Implementierung von make, die von Richard Stallman und Roland McGrath geschrieben wurde und gegenwartig von Paul Smith betreut wird. Unsere Beispiele zeigen C-Programme, da diese sehr verbreitet sind, aber Sie konnen make mit jeder Programmiersprache verwenden, deren Compiler mit einem Shell-Befehl aufgerufen werden kann. Tatsachlich ist make nicht auf Programme beschrankt. Sie konnen damit jede Aufgabe beschreiben, in der einige Dateien automatisch aus anderen aktualisiert werden mussen, wann immer sich wiederum andere andern. Um die Verwendung von make vorzubereiten, mussen Sie eine Datei namens makefile (eine Make-Steuerdatei) schreiben, welche die Beziehungen zwischen den Dateien in Ihrem Programm beschreibt und die Befehle zur Aktualisierung jeder der Dateien angibt. In einem Programm wird die ausfuhrbare Datei typischerweise aus Objektdateien aktualisiert, die im Gegenzug durch Kompilieren von Quelldateien erzeugt werden. Sobald eine geeignetes Makefile existiert, konnen Sie nach jeder Anderung an den Quelldateien mit dem einfachen Shell-Befehl make alle erforderlichen Neukompilierungen durchfuhren. Das Programm make entscheidet anhand der Beschreibung im Makefile und der Zeitstempel der letzten Anderungen an den Dateien, welche Dateien aktualisiert werden mussen. Fur jede dieser Dateien fuhrt es die im Makefile angegebenen Befehle aus. make fuhrt die im makefile angegebenen Befehle aus, um ein oder mehrere Ziele zu aktualisieren, wobei ein Ziel typischerweise ein Programm ist. Falls die Option -f nicht angegeben ist, schaut make nach den Dateien GNUmakefile, makefile und Makefile, in dieser Reihenfolge. Normalerweise sollten Sie Ihr Makefile entweder makefile oder Makefile nennen. Wir empfehlen Makefile, da es so an exponierter Stelle nahe des Anfangs einer Verzeichnisauflistung erscheint, auch nahe zu anderen wichtigen Dateien wie README. Der Name GNUmakefile, nach dem zuerst gesucht wird, ist fur die meisten Makefiles nicht zu empfehlen. Sie sollten diesen Namen nur verwenden, wenn Ihr Makefile speziell fur GNU make geschrieben ist und von anderen Versionen von make nicht verstanden wird. Falls >>-<< als makefile angegeben ist, wird aus der Standardeingabe gelesen. make aktualisiert ein Ziel, falls dieses von anderen Dateien abhangt, die seit der letzten Aktualisierung des Ziels verandert wurden, oder falls das Ziel nicht existiert. OPTIONEN -b, -m Diese Optionen werden ignoriert und sind nur zwecks Kompatibilitat zu anderen Versionen von make vorhanden. -B, --always-make erstellt bedingungslos alle Ziele. -C Verzeichnis, --directory=Verzeichnis wechselt in das angegebene Verzeichnis, bevor die Makefiles gelesen werden oder irgendetwas anderes getan wird. Falls Sie die Option -C mehrmals angeben, wird jede davon relativ zur vorherigen interpretiert: -C / -C etc ist gleichbedeutend mit -C /etc. Dies ist bei rekursiven Aufrufen von make typisch. -d gibt zusatzlich Debugging-Meldungen zu den normalen Verarbeitungsmeldungen aus. Die Debugging-Informationen sagen, welche Dateien zum Neuerstellen infrage kommen, welche Zeitstempel verglichen werden und mit welchen Ergebnissen, welche Dateien tatsachlich neu erstellt werden mussen, welche impliziten Regeln dabei berucksichtigt und welche angewendet werden - einfach alles von Interesse, wie und warum make entscheidet, was zu tun ist. --debug[=SCHALTER] gibt zusatzlich Debugging-Meldungen zu den normalen Verarbeitungsmeldungen aus. Falls die SCHALTETR weggelassen werden, dann ist das Verhalten so, als ware -d angegeben worden. SCHALTER kann eine oder alle der folgenden Namen sein - getrennt durch Kommata oder Leeraum. Nur der erste Buchstabe ist wichtig, der Rest darf entfallen: all fur alle Debug-Ausgaben (gleichbedeutend mit -d), basic fur grundlegende Debug-Ausgaben, verbose fur ausfuhrlichere grundlegende Debug-Ausgaben, implicit fur die Anzeige der impliziten Regelsuchaktionen, jobs fur Details zu den Befehlsaufrufen, makefile fur Debugging wahrend der Neuerstellung der Makefiles, print zur Anzeige der ausgefuhrten Rezepte (selbst wenn sie stillschweigend arbeiten) und why fur den Grund, aus dem make sich entschloss, jedes Ziel neu zu bauen. Mit none konnen Sie alle vorherigen Debugging-Schalter deaktivieren. -e, --environment-overrides bevorzugt Umgebungsvariablen gegenuber den Variablen in Makefiles. -E Zeichenkette, --eval Zeichenkette interpretiert die angegebene Zeichenkette mit der Funktion eval, bevor irgendwelche Makefiles ausgewertet werden. -f Datei, --file=Datei, --makefile=DATEI verwendet die angegebene Datei als Makefile. -i, --ignore-errors ignoriert alle von den Befehlen zur Neuerstellung von Dateien ausgegebenen Fehlermeldungen. -I Verzeichnis, --include-dir=Verzeichnis gibt ein Verzeichnis an, in dem nach darin enthaltenen Makefiles gesucht werden soll. Falls die Option -I mehrmals mit verschiedenen Verzeichnissen angegeben ist, werden die Verzeichnisse in genau der angegebenen Reihenfolge durchsucht. Im Gegensatz zu den Argumenten anderer Schalter fur make durfen Sie Verzeichnisse direkt nach dem Schalter angeben: -IVerzeichnis ist ebenso zulassig wie -I Verzeichnis. Diese Syntax dient der Kompatibilitat zum Schalter -I des C-Praprozessors. -j [Auftrage], --jobs[=Auftrage] gibt die Anzahl der Auftrage (Befehle) an, die gleichzeitig ausgefuhrt werden sollen. Wird die Option -j mehrmals angegeben, ist die zuletzt angegebene wirksam. Wird die Option -j ohne Argument angegeben, begrenzt make die Anzahl der gleichzeitig ausfuhrbaren Auftrage nicht. --jobserver-style=Art gibt die Art des zu verwendenden Auftragsservers an. Die Art kann fifo, pipe oder sem sein (nur unter Windows). -k, --keep-going setzt nach einer Fehlermeldung so weit wie moglich fort. Wahrend zwar das fehlgeschlagene Ziel und die davon abhangigen Ziele nicht neu erstellt werden konnen, ist es dennoch moglich, andere Abhangigkeiten dieser Ziele zu verarbeiten. -l [Last], --load-average[=Last] gibt an, dass keine neuen Auftrage (Befehle) gestartet werden sollen, wenn bereits andere Auftrage ausgefuhrt werden und die gemittelte Last mindestens der angegebenen Last entspricht (eine Fliesskommazahl). Ohne Argument wird die vorherige Lastbegrenzung aufgehoben. -L, --check-symlink-times verwendet die letzte >>mtime<< (Veranderungszeit) zwischen Symlinks und Zielen. -n, --just-print, --dry-run, --recon gibt die Befehle aus, die ausgefuhrt werden wurden, aber fuhrt sie nicht wirklich aus (ausser unter bestimmten Umstanden). -o Datei, --old-file=Datei, --assume-old=Datei erstellt die angegebene Datei nicht neu, selbst wenn sie alter als ihre Abhangigkeiten ist, und erneuert nichts aufgrund von Anderungen in der angegebenen Datei. Im Wesentlichen wird die Datei als uralt betrachtet und deren Regeln werden ignoriert. -O[Typ], --output-sync[=Typ] stellt beim parallelen Ausfuhren mehrerer Auftrage mit -j sicher, dass die Ausgabe jedes Auftrags zusammengefuhrt wird, statt sich mit den Ausgaben anderer Auftrage zu uberschneiden. Falls kein Typ angegeben wird oder target ist, wird die Ausgabe des gesamten Rezepts fur jedes Ziel zusammengefasst. Falls line als Typ angegeben ist, wird die Ausgabe jeder Befehlszeile innerhalb eines Rezepts zusammengefasst. Falls recurse als Typ angegeben ist, wird die Ausgabe eines gesamten Make-Aufrufs rekursiv zusammengefasst. Falls none als Typ angegeben ist, ist die Synchronisierung der Ausgabe deaktiviert. -p, --print-data-base gibt die Datenbasis (Regeln und Variablenwerte) aus, die sich aus der Auswertung der Makefiles ergibt. Dann wird wie ublich oder anderweitig angegeben fortgesetzt. Damit werden auch Versionsinformationen angezeigt, die mit dem Schalter -v ausgegeben werden (siehe nachfolgend). Um die Datenbasis auszugeben, ohne zu versuchen, irgendwelche Dateien neu zu erstellen, verwenden Sie make -p -f/dev/null. -q, --question aktiviert den >>Fragemodus<<. Es werden keine Befehle ausgefuhrt oder etwas ausgegeben. Es wird lediglich ein Exit-Status ausgegeben, der 0 ist, sofern die angegebenen Ziele bereits aktuell sind, oder anderenfalls 1. -r, --no-builtin-rules deaktiviert die Berucksichtigung der eingebauten impliziten Regeln. Ausserdem wird die Standardliste der Suffixe fur die Suffix-Regeln geleert. -R, --no-builtin-variables definiert keine der eingebauten Variablen. -s, --silent, --quiet aktiviert den stillen Modus, in dem die ausgefuhrten Befehle nicht ausgegeben werden. --no-silent setzt die Option -s ausser Kraft. -S, --no-keep-going, --stop setzt die Option -k ausser Kraft. -t, --touch greift auf Dateien zu (markiert sie als aktuell, ohne sie wirklich zu verandern), anstelle deren Befehle auszufuhren. Dadurch wird vorgegaukelt, dass die Befehle bereits ausgefuhrt wurden, um zukunftige Aufrufe von make zu tauschen. --trace gibt Informationen zur Verwendung jedes Ziels aus, also warum das Ziel zur Neuerstellung vorgesehen ist und welche Befehle zur Neuerstellung ausgefuhrt werden. -v, --version gibt die Version von make sowie einen Urheberrechtshinweis, eine Liste der Autoren und einen Hinweis zum Haftungsausschluss aus. -w, --print-directory gibt eine Meldung aus, welche das Arbeitsverzeichnis vor und nach der weiteren Verarbeitung angibt. Dies ist hilfreich, um Fehler einzugrenzen, die in komplizierten Verschachtelungen rekursiver make-Aufrufe entstehen. --no-print-directory deaktiviert -w selbst dann, wenn es implizit aktiviert wurde. --shuffle[=MODUS] aktiviert das Umsortieren von Zielen und der Anordnung der Vorbedingungen. MODUS ist entweder none, um den Umsortiermodus zu deaktivieren, random, um die Vorbedingungen zufallig umzusortieren, reverse, um Vorbedingungen in inverser Reihenfolge zu berucksichtigen oder eine Ganzzahl , die den Modus random mit dem speziellen Saat-Wert aktiviert. Falls MODUS nicht angegeben ist, ist die Vorgabe random. -W Datei, --what-if=Datei, --new-file=Datei, --assume-new=Datei tauscht vor, dass die angegebene Ziel-Datei gerade geandert wurde. Wenn dies zusammen mit dem Schalter -n verwendet wird, zeigt es Ihnen, was geschehen wurde, wenn Sie die Datei verandern wurden. Ohne -n ist es fast das Gleiche wie die Ausfuhrung eines touch-Befehls mit der angegebenen Datei vor der Ausfuhrung von make, aber mit dem Unterschied, dass der Anderungszeitpunkt nur in der Fantasie von make geandert wurde. --warn-undefined-variables warnt, wenn eine nicht definierte Variable referenziert wird. EXIT-STATUS GNU make beendet sich mit dem Status 0, wenn alle Makefiles erfolgreich ausgewertet wurden und fur keines der Ziele die Erstellung fehlgeschlagen ist. Der Status 1 wird zuruckgeliefert, wenn der Schalter -q angegeben wurde und make ermittelt hat, dass ein Ziel neu erstellt werden muss. Der Status 2 wird zuruckgeliefert, falls irgendwelche Fehler aufgetreten sind. SIEHE AUCH Die vollstandige Dokumentation fur make wird als ein Texinfo-Handbuch gepflegt. Wenn die Programme info(1) und make auf Ihrem Rechner ordnungsgemass installiert sind, konnen Sie mit dem Befehl info make auf das vollstandige Handbuch zugreifen. FEHLER Siehe das Kapitel >>Problems and Bugs<< in The GNU Make Manual. AUTOR Diese Handbuchseite wurde von Dennis Morse von der Stanford University geschrieben. Spatere Aktualisierungen stammen von Mike Frysinger. Sie wurde von Roland McGrath uberarbeitet und wird derzeit von Paul Smith betreut. COPYRIGHT Copyright (C) 1992-1993, 1996-2023 Free Software Foundation, Inc. Diese Datei ist Teil von GNU Make. GNU Make ist freie Software; Sie konnen es weitergeben und/oder verandern, solange Sie sich an die Regeln der >>GNU General Public License<< halten, so wie sie von der Free Software Foundation festgelegt wurden; entweder in Version 3 der Lizenz oder (nach Ihrem Ermessen) in jeder neueren Version. GNU Make wurde mit dem Ziel veroffentlicht, dass Sie es nutzlich finden, jedoch OHNE JEGLICHE GARANTIE, sogar ohne eine implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FUR EINEN SPEZIELLEN ZWECK. Schauen Sie fur weitere Informationen bitte in der >>GNU General Public License<< (GNU GPL) nach. Zusammen mit diesem Programm sollten Sie ausserdem eine Kopie der >>GNU General Public License<< erhalten haben. Wenn dem nicht so ist, siehe https://www.gnu.org/licenses/. UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Mario Blattermann und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . GNU 26. Mai 2023 MAKE(1)