Was bieten Makefiles für einfache Projekte gegenüber "einfachen" Bash-Skripten?

4046
Closure Cowboy

Wenn ich beispielsweise eine Front-End-Website entwickle, habe ich möglicherweise mehrere CoffeeScript- Dateien, mehrere Sass- Dateien, mehrere HTML-Dateien und einige Bilder.

Die CoffeeScript-Dateien müssen zu JavaScript kompiliert werden, die Sass-Dateien müssen zu CSS kompiliert werden, und diese neuen Dateien müssen minimiert werden. Für die Bilder müssen ihre Metadaten entfernt werden. Alle resultierenden Dateien müssen in ein neues Verzeichnis mit einer eigenen Struktur verschoben werden.

Nichts davon scheint besonders kompliziert zu sein, aber ich habe gesehen, dass mehrere Leute Makefiles dafür verwenden.

Bin ich zu zögerlich, zu lernen, wie man Makefiles verwendet? Welche Vorteile könnten sie gegenüber einem einfachen Bash-Skript bieten?

7

2 Antworten auf die Frage

6
dmckee

Also, du hast Recht, dass dies nicht eine große Aufgabe, die von make angebotenen Vorteile jetzt sind

  • Wie Ignacio sagt, ist make dem parallelen Gebäude bewusst. Verwenden Sie die -jFlagge.

  • Wenn Sie Ihre Abhängigkeiten richtig ausgedrückt haben, stellen Sie niemals Dinge wieder her, die sie nicht brauchen. Sicher, Sie können das in einem Bash-Skript erhalten, aber es bedeutet, dass das Skript komplexer wird (und ich muss die Manpage lesen, um sich daran zu erinnern, wie), was bereits darüber Bescheid weiß.

  • Sie können generische Regeln (Suffix-Regeln (alter Stil) oder Musterregeln (bevorzugt in GNU make)) definieren, die für alle Dateien des Typs "Bar" aus dem Typ "Foo" erstellt werden müssen. Wieder wird eine Schleife das in bash behandeln, aber make weiß bereits, wie das geht.

Der große Vorteil ist jedoch: Wenn die Aufgabe komplizierter wird, wächst das Makefile langsam und einfach, während das Skript unerwartet aufgeblasen wird.

Wenn Sie programmieren können (mehr oder weniger überhaupt) , können Sie das Erstellen (vielleicht ist die Sprache auf den ersten Blick etwas seltsam) erledigt werden.

4
Ignacio Vazquez-Abrams

Makefiles ermöglichen eine einfache Parallelisierung. Da make Abhängigkeiten kennt (kennt) kann, kann es Jobs so anordnen, dass alle Kerne des Systems so effektiv wie möglich genutzt werden.