Make scheint mir einfach ein Shell-Skript mit etwas einfacherem Umgang mit Kommandozeilenargumenten zu sein.
Warum ist es Standard, make anstelle von ./make.sh auszuführen?
shell
makefile
compilation
HoboBen
quelle
quelle
Antworten:
Die allgemeine Idee ist, dass
make
(vernünftigerweise) minimale Neuerstellungen unterstützt werden - dh Sie sagen, welche Teile Ihres Programms von welchen anderen Teilen abhängen. Wenn Sie einen Teil des Programms aktualisieren, werden nur die Teile neu erstellt, die davon abhängen. Während Sie dies mit einem Shell-Skript tun könnten , wäre es viel mehr Arbeit (explizites Überprüfen der zuletzt geänderten Daten aller Dateien usw.). Die einzige offensichtliche Alternative mit einem Shell-Skript besteht darin, jedes Mal alles neu zu erstellen. Für kleine Projekte ist dies ein durchaus vernünftiger Ansatz, aber für ein großes Projekt kann ein vollständiger Umbau leicht eine Stunde oder länger dauern - mitmake
können Sie das gleiche in ein oder zwei Minuten erreichen ...Ich sollte wahrscheinlich auch hinzufügen, dass es einige Alternativen gibt, die zumindest weitgehend ähnliche Fähigkeiten aufweisen. Insbesondere in Fällen, in denen nur wenige Dateien in einem großen Projekt neu erstellt werden, sind einige von ihnen (z. B. Ninja ) häufig erheblich schneller als make.
quelle
Make ist ein Expertensystem
Es gibt verschiedene Dinge, die mit Shell-Skripten schwer zu tun sind ...
quelle
Make stellt sicher, dass nur die erforderlichen Dateien neu kompiliert werden, wenn Sie Änderungen an Ihren Quelldateien vornehmen.
Beispielsweise:
Wenn ich
2.h
nur die Datei änderemake
und ausführe, werden alle 3 Befehle in umgekehrter Reihenfolge ausgeführt.Wenn ich
1.c
nur die Datei ändere und ausführemake
, werden nur die ersten beiden Befehle in umgekehrter Reihenfolge ausgeführt.Der Versuch, dies mit Ihrem eigenen Shell-Skript zu erreichen, erfordert viele
if/else
Überprüfungen.quelle
rsync -r -c -I $SOURCE $DEST_DIR
in der Shell.Darüber hinaus ist Make eine deklarative (-ish) parallele Programmiersprache.
Angenommen, Sie müssen 4.000 Grafikdateien und 4 CPUs konvertieren. Versuchen Sie, ein 10-zeiliges Shell-Skript zu schreiben (ich bin hier großzügig), das dies zuverlässig tut, während Ihre CPUs gesättigt sind.
Vielleicht ist die eigentliche Frage, warum sich die Leute die Mühe machen, Shell-Skripte zu schreiben.
quelle
make behandelt Abhängigkeiten: Das Makefile beschreibt sie: Die Binärdatei hängt von Objektdateien ab, jede Objektdatei hängt von einer Quelldatei und Headern ab. Wenn make ausgeführt wird, wird das Datum der Dateien verglichen, um zu bestimmen, was neu kompiliert werden muss .
Man kann direkt ein Ziel aufrufen, um nicht alles zu erstellen, was im Makefile beschrieben ist.
Darüber hinaus bietet die make-Syntax die Substitution vpath
All dies kann in Shell-Skripten geschrieben werden, mit make haben Sie es bereits.
quelle