Ich mag Makefiles
(switowski.com)-
Ich mag Makefiles. Ich benutze sie seit über 10 Jahren zum ersten Mal. Schon damals wirkten sie wie eine alte Technologie. Im Lauf der Zeit kamen neue Build-Tools auf und verschwanden wieder, aber Makefiles wurden weiterhin verwendet. Als ich an Projekten mitarbeitete, gewöhnte ich mich daran, und irgendwann begann ich, sie zu mögen. Heute ist es das erste Automatisierungstool, das ich verwende, wenn ich ein neues Projekt starte.
-
Der Grund, warum ich Makefiles mag, ist, dass sie einer informellen Konvention folgen, mit der sich derselbe Befehlssatz umsetzen lässt. Wenn ich auf ein neues Projekt stoße und eine Datei namens
Makefilesehe, führe ichmakeodermake buildaus und danachmake install; dann wird das Projekt gebaut und eingerichtet. Oder ich bekomme Informationen über zusätzliche Schritte. -
Ich versuche, dieselbe Konvention auch in meinen Projekten anzuwenden. Wenn ich einen alten Projektordner öffne und
make devausführe, werden alle nötigen Schritte erledigt, um das Projekt zu bauen und den Entwicklungsserver zu starten. Da ich mit verschiedenen Technologien gearbeitet habe, gab es für jede Technologie andere Befehle. Mit einem Makefile lassen sich auch Projekte leicht verwalten, die ich monatelang oder jahrelang nicht angefasst habe. -
Makefiles sind einfach. Ich verwende keine Bedingungen, Flags oder andere komplexe Funktionen. Die meisten Aufgaben bestehen aus einem oder mehreren Shell-Befehlen. Man könnte auch ein Bash-Skript mit einigen Funktionen schreiben, aber ein Makefile ist einfacher und schneller zu schreiben.
-
Die meisten persönlichen Projekte enthalten die folgenden allgemeinen Aufgaben:
dev: Entwicklungsserver startenbuild: Projekt bauen (falls ein Build-Schritt erforderlich ist)deploy: Projekt deployen/veröffentlichen
-
Dieser Blog hat ein einfaches Makefile mit nur einem Target:
dev: npm run dev -
In komplexeren Projekten verwende ich Makefiles wie dieses:
# Entwicklungsserver starten dev: bundle exec jekyll serve --unpublished -w --config _config.yml,_config-dev.yml --livereload # Assets bauen build: npm run gulp build # Bestimmte Ordner überwachen und Assets verarbeiten watch: npm run gulp watch -- --wip # Website lokal bauen, verschlüsseln und auf dem Netlify-Server deployen deploy: JEKYLL_ENV=production bundle exec jekyll build; \ make encrypt; \ netlify deploy --prod # Ordner "_site" verschlüsseln encrypt: npx staticrypt _site/*.html -r -d _site -
Im obigen Beispiel wird die Existenz von phony Targets ignoriert. Wenn es eine Datei namens
dev,build,watch,deployoderencryptgibt, funktioniert das Makefile möglicherweise nicht wie erwartet. -
GNU Make ist sehr verbreitet. Unter Linux ist es wahrscheinlich bereits installiert. Auch auf meinem MacBook kann ich mich nicht erinnern, es explizit installiert zu haben. Vermutlich wurde es zusammen mit anderen Tools installiert. Make ist einfach und hat weniger zusätzliche Abhängigkeiten als andere Build-Tools. Das kann in eingeschränkten Umgebungen nützlich sein. Wahrscheinlich ist Make bereits vorhanden. Falls nicht, kann man die Befehle aus dem Makefile auch manuell in der Shell ausführen.
-
Das ist kein Widerspruch gegen andere Build-Tools. Wenn ich ein neues Build-Tool entdecke, finde ich das spannend. Trotzdem verwalte ich mit Make weiterhin verschiedene Tools.
Zusammenfassung von GN⁺
- Makefiles bieten in unterschiedlichen Projekten einen konsistenten Befehlssatz und erleichtern so die Verwaltung.
- Mit ihrer einfachen Syntax und wenigen Abhängigkeiten sind sie auch in eingeschränkten Umgebungen nützlich.
- Sie lassen sich zusammen mit verschiedenen Build-Tools verwenden und sind dadurch sehr flexibel.
- Werkzeuge mit ähnlicher Funktion sind unter anderem
CMake,NinjaundGradle.
2 Kommentare
Wenn keine Abhängigkeiten definiert sind, bietet ein Ersatz des
makefiledurchjustfileeine bessere Benutzerfreundlichkeit.Hacker-News-Kommentare
Ermutigung zur Nutzung von Make
Probleme mit Makefiles
Vorteile von Make
Verwendung von PHONY-Zielen
Hitzige Debatte über Make
Vielfältige Einsatzmöglichkeiten von Make
Grenzen von Make und Alternativen
Umstieg auf Justfiles
Einfache Nutzung von Makefiles