Die am häufigsten verwendeten Funktionen von make können in ein paar einfache Konzepte, Ziele, Abhängigkeiten und Variablen unterteilt werden.
Ziele sind die Dinge, die Sie erstellen möchten, aber die Befehle unter einem Ziel können Compilerbefehle oder Skripts sein. Im Allgemeinen bezieht sich jedes Ziel auf ein Modul in Ihrem Code, aber Sie können diese so granular gestalten, wie Sie möchten, um zu Ihrem Projekt zu passen.
Abhängigkeiten sind Dateien oder andere Ziele in Ihrem Projekt. Das beste Beispiel hierfür ist ein C-Projekt, bei dem Sie aus einer Reihe von Objektdateien eine Binärdatei erstellen. Jede Objektdatei muss vorhanden sein, bevor Sie die Binärdatei erstellen können. Daher wird make Ihre Ziele durchlaufen, bis alle Abhängigkeiten abgeschlossen sind, und dann den Befehl für das Gesamtziel ausführen.
Variablen sind nicht immer notwendig, aber für die Handhabung von Compiler-Flags ziemlich praktisch. Die kanonischen Beispiele sind CC und CCFLAGs, die sich auf den Compiler beziehen, d. H. Gcc und die Flags wie -ansi -Wall -o2.
Noch ein paar allgemeine Tipps und Tricks:
- Befehle müssen durch eine [Tab] Charakter vorgegangen werden, oder sie werden nicht durchgeführt werden, das ist nur ein altes Relikt aus make, ich don Ich erinnere mich nicht, warum das so ist.
- Per Konvention möchten Sie möglicherweise ein all-Ziel angeben, um den Standard anzugeben, welches Ziel der Standard sein sollte. Dies ist nützlich, wenn Sie ein komplexes Makefile haben und ein bestimmtes Ziel immer der Standard sein soll.
- sollte Ihr Make-Datei Make-Datei oder Makefile genannt werden, aber wenn man es etwas anderes nennen wollen, stellen Sie verwenden $ -f [makefilename]
- immer die volle variable Erweiterung Syntax dh $ verwenden (variabel) oder nicht machen die Befehle, die Sie wollen.
- make kann rekursiv arbeiten, wenn Sie also eine Reihe von Submodulen in Ihrem Projekt haben, die innerhalb von Verzeichnissen leben, können Sie make auf dem Unterverzeichnis makefile von make aufrufen, um jedes zu erstellen.
- Wenn Sie ein wirklich kompliziertes Projekt haben, das ein Installationsskript usw. benötigt, werden Sie vermutlich auch autotools untersuchen wollen, welches das Makefile für Sie generiert und eine Reihe von Tricks durchführt, um nach Bibliotheksbeständen und anderen Portabilitätsproblemen zu suchen.
Ich hatte gehört, dass ein Stammbaum für Makefiles ziemlich inzestous aussehen würde. : D –
Ich habe noch nie eine Herde von jemandem "rollen" ihre eigene Perl/Python/ect. System für komplexe oder "mehr als einfache" Build-Szenarien. Tatsächlich bauen Werkzeuge wie Pythons SCon's auf sein Gesicht mit einer sehr großen komplexen Codebasis. Aber ich stimme Ihnen zu, dass Sie wahrscheinlich durch das "Ausleihen" von Skripten anderer Leute auskommen können. – Tom
@Tom - nicht so sehr für den 'Was hat sich geändert/Neumstrukturierung' Teil von make, aber mehr für die zusätzlichen Tools zum Einrichten von DBs, Generieren von Seriennummern und Brennen von CDs –