Nach fast drei Jahren Entwicklung wurde das Build-System GNU Make 4.4 veröffentlicht. Neben Fehlerbehebungen sind in der neuen Version folgende Änderungen zu vermerken:
- Die Plattformen OS/2 (EMX), AmigaOS, Xenix und Cray wurden als veraltet erklärt, die Unterstützung wird in der nächsten Version eingestellt.
- Die Anforderungen an die Build-Umgebung wurden erhöht, für den Build von GNU Gnulib ist nun ein Compiler erforderlich, der Elemente aus dem C99-Standard unterstützt.
- Es wurde ein spezielles Ziel .WAIT hinzugefügt, das es ermöglicht, den Start des Builds bestimmter Ziele bis zum Abschluss des Builds anderer Ziele zu pausieren.
- Im speziellen Build-Ziel .NOTPARALLEL wurde die Möglichkeit implementiert, Prerequisites (Dateien, die für den Build des Ziels erforderlich sind) für die sequentielle Ausführung der damit verbundenen Ziele anzugeben (als ob zwischen jedem Prerequisite ein „.WAIT“ gesetzt wäre).
- Ein spezielles Build-Ziel .NOTINTERMEDIATE wurde hinzugefügt, das das Verhalten im Zusammenhang mit der Verwendung von intermediären Zielen (.INTERMEDIATE) für angegebene Dateien, Dateien, die unter eine Maske fallen, oder für das gesamte Makefile deaktiviert.
- Die Funktion $(let …) wurde implementiert, die es ermöglicht, lokale Variablen in benutzerdefinierten Funktionen zu definieren.
- Die Funktion $(intcmp …) wurde zur Vergleich von Zahlen implementiert.
- Bei Verwendung der Option „-l“ (—load-average) zur Bestimmung der Anzahl der gestarteten Jobs werden nun die Daten aus der Datei /proc/loadavg über die Systemauslastung berücksichtigt.
- Die Option „—shuffle“ wurde hinzugefügt, um Prerequisites zu mischen, was ein nichtdeterministisches Verhalten bei parallelem Build ermöglicht (z.B. für Fuzzing-Tests zur Überprüfung der Richtigkeit der Ermittlung der Prerequisites im Makefile).
- Auf Systemen mit mkfifo-Unterstützung wird eine neue Methode zur Interaktion mit dem Jobserver bei der parallelen Ausführung von Jobs implementiert, die auf der Verwendung benannter Pipes basiert. Um die alte Methode auf der Basis von unbenannten Pipes wiederherzustellen, wurde die Option „—jobserver-style=pipe“ vorgeschlagen.
- Die Verwendung temporärer Dateien im Arbeitsprozess wurde erweitert (es können Probleme auftreten, wenn das Build-System ein alternatives Verzeichnis für temporäre Dateien (TMPDIR) festlegt und den Inhalt von TMPDIR während des Builds löscht).
Quelle: opennet.ru
