2008-10-20 23 views
11

Ich versuche GNUMake für ein kleines Projekt zu lernen, an dem ich arbeite. Bis jetzt scheinen selbst die "grundlegenden" Tutorials ziemlich grob zu sein und ich muss noch die Makefile-Syntax verstehen.Ressourcen zum Lernen von GNUMake?

Hat jemand einige gute Ressourcen für einen absoluten Anfänger, um sich mit GNUMake vertraut zu machen?

Antwort

12

Die definitive Anleitung ist http://www.gnu.org/software/make/manual/make.html
Es gibt ein O'Reilly Buch "Verwalten von Projekten mit GNU Make", die mehr Erklärung hat. Sie können auch die früheren Ausgaben verwenden, sie decken GnuMake nicht spezifisch ab, sind aber viel dünner.

Make ist ein schmutziges Geheimnis unter Entwicklern - keiner von uns versteht es, wir borgen nur ein make-Skript von jemand anderem und ändern es. Ich stelle mir vor, dass nur ein Skript jemals von Grund auf neu geschrieben wurde (wahrscheinlich vom Ersteller des Tools).

Wenn Sie mehr als das einfache Beispiel tun müssen, wechseln die meisten Leute entweder zu einem moderneren Build-System wie Ant oder rollen ihr eigenes in Perl/Python/etc.

+0

Ich hatte gehört, dass ein Stammbaum für Makefiles ziemlich inzestous aussehen würde. : D –

+0

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

+0

@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 –

0

mgb: Es ist noch schlimmer, dass das. Ich habe mal ein kompliziertes make-System von Grund auf geschrieben (ein paar tausend Dateien, fünfzig oder hundert Verzeichnisse, vier oder fünf Compiler und Cross-Compilation-Ziele, 2 OS's, etc.). Ich setzte mich hin und lernte Gnu zuerst von innen und außen machen, gestaltete das System, spielte zuerst mit einem Prototyp rum. Wir waren alle sehr glücklich mit dem Ergebnis.

Aber das war vor Jahren. Weißt du, wie ich heute schreibe? So wie du es beschreibst. Es ist nur knifflig genug und die Syntaxdetails sind obskur genug, es sei denn, Sie tun es ziemlich regelmäßig, Sie können sich nicht an die Details erinnern. Genau wie jede andere Sprache mit nicht intuitiver Syntax und einigen schrulligen Regeln, schätze ich.

+0

Wir gaben auf und schrieben unser eigenes einfaches systme in Python, es musste auf windows/linux/sparc bauen und war leichter als zu versuchen, zu verstehen. –

+0

Ich dachte das, aber machen war nicht so schlimm, sobald ich meinen Kopf drum herum hatte. Das war Vorpython und Rubin; Ich nehme an, ich hätte vielleicht früh Perl benutzen können. – simon

3

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.
+0

Irgendetwas Tutorisches dazu? Ich verstehe die allgemeinen Konzepte von GNUMake, aber die Makefile-Syntax ist ein wenig geheimnisvoll. –

+0

Es tut mir leid, Dana, aber einige der Aussagen in der obigen Liste sind falsch. Zum Beispiel sind sowohl Makefile als auch Makefile akzeptabel, und make sucht nicht nach dem Ziel "all". Normalerweise wird "all" am Anfang der Datei platziert, das ist alles. Außerdem muss den Befehlen ein Tab und kein Zeichen vorangestellt werden. –

+0

Notiert, Jeffs HTML-Desinfektionsmittel aß meinen Tab-Kommentar. Ich werde diese Korrekturen hinzufügen –

2

Ich stimme dem O'Reilly-Buchvorschlag zu.

Für einige hilfreichen Tipps, Tricks und Einblicke in Make Blick auf den Mr. Make articles

0

Ich bin nicht großer Fan von GNU Info-System, aber ich habe das GNU macht Info-Seiten als sehr nützlich erwiesen. Wenn Sie die grundlegenden Konzepte kennen und grob darüber wissen, welche Art von Dingen verfügbar sind, habe ich festgestellt, dass Informationsseiten am schnellsten Informationen wie vorgefertigte Funktionen zum Beispiel vermitteln.

(Vergessen Sie die GNU info Programm, und verwenden Sie zB pinfo statt.)

2

"Verwalten von Projekten mit GNU Make, 3. Auflage" wird gesetzt unter "GNU Free Documentation License" und kann legal kostenlos online gelesen werden: link.