Normalerweise würden Sie diese Sammlung von Code kompilieren, indem Sie den folgenden Befehl ausführen: gcc - o hellomake hellomake. c hellofunc. c - I. Dies kompiliert die beiden. c Dateien und nennt die ausführbare Hellomake. Das i. Ist enthalten, so dass gcc in das aktuelle Verzeichnis (.) Für die Include-Datei hellomake. h schauen wird. Ohne ein Makefile ist der typische Ansatz für den Testmodifydebug-Zyklus, den Aufwärtspfeil in einem Terminal zu verwenden, um zu deinem letzten Kompilierbefehl zurückzukehren, also musst du ihn nicht jedes Mal eingeben, besonders wenn du dir noch ein paar weitere. c-Dateien hinzugefügt hast mischen. Leider hat dieser Ansatz zur Kompilierung zwei Stürze. Erstens, wenn Sie den Kompilierbefehl verlieren oder Computer wechseln, müssen Sie es von Grund auf neu schreiben, was im besten Fall ineffizient ist. Zweitens, wenn Sie nur Änderungen an einer. c-Datei vornehmen, die Neukompilierung aller von ihnen jedes Mal ist auch zeitaufwändig und ineffizient. Also, seine Zeit zu sehen, was wir mit einem Makefile machen können. Das einfachste Makefile, das du schaffen könnte, würde so aussehen: Wenn du diese Regel in eine Datei namens Makefile oder Makefile steckst und dann auf die Kommandozeile eintippst, führt sie den Befehl compile aus, wie du ihn im Makefile geschrieben hast. Beachten Sie, dass ohne Argumente die erste Regel in der Datei ausführt. Darüber hinaus, indem Sie die Liste der Dateien, auf denen der Befehl hängt von der ersten Zeile nach dem:. Weiß, dass die Regel hellomake ausgeführt werden muss, wenn sich irgendwelche dieser Dateien ändern. Sofort haben Sie das Problem 1 gelöst und können den wiederholten Pfeil wiederholt vermeiden und nach Ihrem letzten Kompilierungsbefehl suchen. Allerdings ist das System noch nicht effizient in Bezug auf die Erstellung nur die neuesten Änderungen. Eine sehr wichtige Sache zu beachten ist, dass es eine Registerkarte vor dem gcc-Befehl in der Makefile gibt. Es muss eine Registerkarte am Anfang eines Befehls geben, und machen wird nicht glücklich sein, wenn es nicht dort ist. Um ein bisschen effizienter zu sein, lass uns folgendes ausprobieren: So haben wir nun einige Konstanten CC und CFLAGS definiert. Es stellt sich heraus, dass dies spezielle Konstanten sind, die kommunizieren, um zu machen, wie wir die Dateien hellomake. c und hellofunc. c kompilieren wollen. Insbesondere ist das Makro CC der C-Compiler zu verwenden, und CFLAGS ist die Liste der Flags, die an den Kompilierungsbefehl übergeben werden. Durch das Setzen der Objektdateien - hellomake. o und hellofunc. o - in der Abhängigkeitsliste und in der Regel, weiß es, dass es zuerst die. c Versionen einzeln kompilieren muss und dann die ausführbare Hölle machen soll. Die Verwendung dieser Form von Makefile ist für die meisten Kleinprojekte ausreichend. Allerdings fehlt noch eine Sache: Abhängigkeit von den Include-Dateien. Wenn du eine Änderung an hellomake. h machen würdest, dann machst du die. c-Dateien nicht neu kompilieren, obwohl sie es sein mussten. Um dies zu beheben, müssen wir sagen, dass alle. c-Dateien von bestimmten. h-Dateien abhängen. Wir können dies tun, indem wir eine einfache Regel schreiben und sie dem Makefile hinzufügen. Diese Ergänzung erstellt zuerst das Makro DEPS, welches die Menge der. h-Dateien ist, auf denen die. c-Dateien abhängen. Dann definieren wir eine Regel, die für alle Dateien gilt, die im. o-Suffix enden. Die Regel sagt, dass die. o-Datei von der. c-Version der Datei und den. h-Dateien abhängt, die im DEPS-Makro enthalten sind. Die Regel sagt dann, dass, um die. o-Datei zu erzeugen, muss die. c-Datei mit dem im CC-Makro definierten Compiler kompilieren. Das - c-Flag sagt, um die Objektdatei zu erzeugen, das - o sagt, die Ausgabe der Kompilierung in die Datei auf der linken Seite der:. Das lt ist das erste Element in der Abhängigkeitsliste und das CFLAGS-Makro ist wie oben definiert. Als endgültige Vereinfachung können wir die Sondermakros und. Die sind die linke und rechte Seite der:. Um die Gesamtkompilationsregel allgemeiner zu machen. Im folgenden Beispiel sollten alle Include-Dateien als Teil des Makros DEPS aufgelistet werden, und alle Objektdateien sollten als Teil des Makro-OBJ aufgeführt werden. Also, was ist, wenn wir anfangen wollen, unsere. h-Dateien in ein Include-Verzeichnis, unseren Quellcode in einem src-Verzeichnis und einige lokale Bibliotheken in einem lib-Verzeichnis zu setzen. Auch können wir irgendwie verstecken diese lästigen. o-Dateien, die rund um die herum hängen Ort Die Antwort ist natürlich ja. Das folgende Makefile definiert Pfade zu den Include - und Lib-Verzeichnissen und platziert die Objektdateien in einem obj-Unterverzeichnis innerhalb des src-Verzeichnisses. Es hat auch ein Makro für alle Bibliotheken definiert, die Sie hinzufügen möchten, wie die Mathematik-Bibliothek - lm. Dieses Makefile sollte sich im src-Verzeichnis befinden. Beachten Sie, dass es auch eine Regel zum Aufräumen Ihrer Quell - und Objektverzeichnisse enthält, wenn Sie make make machen. Die. PHONY-Regel macht es möglich, etwas mit einer Datei namens clean zu machen. So haben Sie jetzt ein perfektes Makefile, dass Sie modifizieren können, um kleine und mittelgroße Softwareprojekte zu verwalten. Sie können mehrere Regeln zu einem Makefile hinzufügen, können Sie sogar Regeln erstellen, die andere Regeln aufrufen. Für weitere Informationen über makefiles und die make-Funktion, schauen Sie sich die GNU Make Manual. Das wird dir mehr sagen, als du jemals wissen wolltest (wirklich). Um technisch korrekt zu sein, glaube ich, dass du es benutzen sollst. PHONY: reinige alle Standardwerte für die Ziele, die von der Kommandozeile aus benutzt werden sollen. Auch AutoconfAutomake ist so schlecht. Sicher, sie fühlen sich schrecklich, und sich an sie gewöhnen ist etwa so lustig wie zwingen Sie Ihren Kopf durch eine Mauer, aber sie arbeiten, und sie sind gut entwickelt, und sie hüllen die meisten Ihrer Basen so weit wie Portabilität, und wird Ihre machen Das Leben viel einfacher am Ende, sobald man sich an ihr schreckliches Design gewöhnen kann. Ndash Chris Lutz Ich glaube, das funktioniert, aber ich dachte, wenn ich tippte auf den Terminal, das das Programm laufen sollte. Dies ist, was ich bekomme: gcc statsh. o - Wall - lm - o prog Ist es möglich, nur geben make und führen Sie das Programm ndash user69514 Sep 28 09 bei 0:38 Abhängig von der Anzahl der Header und Ihre Entwicklungsgewohnheiten können Sie Wollen gccmakedep zu untersuchen. Dieses Programm untersucht Ihr aktuelles Verzeichnis und fügt dem Ende des Makefiles die Header-Abhängigkeiten für jede. ccpp-Datei hinzu. Dies ist Overkill, wenn Sie 2 Header und eine Programmdatei haben. Allerdings, wenn Sie 5 kleine Testprogramme haben und Sie bearbeiten einen von 10 Headern, können Sie dann vertrauen machen, um genau die Programme neu zu erstellen, die durch Ihre Änderungen geändert wurden. Antwortete Sep 28 09 um 3:59
No comments:
Post a Comment