Ich habe gesehen, dass make
dies für große Projekte nützlich ist, insbesondere für verwirrende Abhängigkeiten, die in a beschrieben sind Makefile
, und auch für den Workflow. Ich habe keine Vorteile für die Verwendung make
für kleine Projekte gehört. Sind da irgendwelche?
scripting
compiling
make
development
Goodwin Lu
quelle
quelle
make
, um die Antwort zu finden. Erstellen Sie eine anständige Vorlage Makefile und bearbeiten Sie einfach die Variable der Quelldateien. Sie müssen den ganzen Jazz nicht tippen.make
ist ein viel schneller zu tippender Befehl als die meisten anderen, selbst wenn Sie kein intelligentes Makefile erstellen, um Abhängigkeiten sauber zu behandeln :-)Antworten:
Im Gegensatz zu was?
Angenommen, Sie haben ein Programm, das Sie in zwei Dateien aufgeteilt haben, die Sie fantasievoll benannt haben
file1.c
undfile2.c
. Sie können das Programm kompilieren, indem Sie es ausführenDies erfordert jedoch, dass beide Dateien jedes Mal neu kompiliert werden, auch wenn sich nur eine geändert hat. Sie können die Kompilierungsschritte in zerlegen
Wenn Sie dann eine der Dateien bearbeiten, kompilieren Sie nur diese Datei neu (und führen Sie den Verknüpfungsschritt aus, unabhängig davon, was Sie geändert haben). Aber was ist, wenn Sie eine Datei und dann die andere bearbeiten und vergessen, dass Sie beide Dateien bearbeitet und versehentlich nur eine neu kompiliert haben?
Selbst für nur zwei Dateien stehen dort Befehle im Wert von etwa 60 Zeichen zur Verfügung. Das Tippen wird schnell mühsam. OK, sicher, Sie könnten sie in ein Skript einfügen, aber dann können Sie jedes Mal wieder neu kompilieren. Oder Sie schreiben ein wirklich ausgefallenes, kompliziertes Skript, das überprüft, welche Datei (en) geändert wurden, und nur die erforderlichen Kompilierungen vornimmt. Sehen Sie, wohin ich damit gehe?
quelle
gcc -O3 -march=native -fwhole-program *.c
ist dies grundsätzlich in Ordnung für einen Bearbeitungs- / Kompilierungs- / Profilzyklus. Sie möchten jedoch weiterhin ein Makefile, das andere Benutzer verwenden können. Die Möglichkeit-fwhole-program
, alles zusammen zu kompilieren, macht Spaß,-flto
bietet Ihnen aber normalerweise fast die gleichen Optimierungen.Viele andere Leute beschäftigen sich mit den Details komplexerer Makefiles und der damit verbundenen Komplexität. Ich benutze Makefiles normalerweise aus einem ganz anderen Grund:
Ich möchte mich an nichts erinnern.
Auch wenn Ihr Projekt wirklich langweilig und einfach ist und Sie Makefiles nicht "richtig" verwenden:
Ich muss nicht darüber nachdenken oder es anders behandeln als ein komplexeres Projekt:
Oder wenn ich Flags angegeben habe (z. B.
-O2
), muss ich mich nicht daran erinnern, was sie waren.Wenn Sie mit einem einfachen Makefile beginnen und später Dinge zusammenführen / umgestalten müssen, müssen Sie nicht daran denken, jedes Projekt anders zu erstellen.
quelle
Selbst bei kleinen Projekten kann es hilfreich sein, die Abhängigkeitslogik unter Kontrolle zu halten und Builds zu automatisieren. Ich habe es auch verwendet, um Installationen und Deinstallationen auszulösen, also war es ein Hauptschalter, der die Bühne zurücksetzte.
quelle
Wenn Sie Ihre App aus zwei Quellen (
.c
Dateien) verknüpfen , müssen Sie nicht jede Datei neu kompilieren, sondern nur die geänderte, wenn Sie make verwenden.Außerdem werde ich Ihnen ein Beispiel aus der BSD-Welt geben. Sie haben ein Framework für systembasierte Makefiles. Sie bieten Ihnen Pfade zu Systemverzeichnissen und haben Ziele für die Installation Ihrer Software und Handbuchseiten.
Zum Beispiel haben Sie gerade
beer.c
App und Handbuch dafür geschriebenbeer.6
. Sie erstellenMakefile
:..und anrufen
make install
. Es kompiliert und installiert Ihre App automatisch/usr/bin
und kompiliert und installiert Ihre Manpage an der Stelle, an derman
Sie sie finden können. Sie haben gerade Ihre App mit einem einfachen Befehl installiert!Sehr praktisch und absolut transparent für alle, die mit BSD vertraut sind. Viel besser als manuelles Skript.
quelle
Beispiel
Makefile
für mein sehr kleines Projekt:getPixelColor
Es macht genau das, was sein Name sagt, und nimmt zwei optionale Argumente, die Koordinaten.
Mir gefällt besonders, wie die Dinge dort abhängig werden.
Wie Sie sehen, kann es alles tun, was Sie brauchen, ohne etwas extra einzugeben:
Verwendungszweck
Sie können es folgendermaßen ausführen:
Bereinigen Sie die alte Binärdatei:
Kompilieren Sie eine neue Binärdatei:
Führen Sie die ausführbare Datei auf zwei Arten aus:
die Standardkoordinaten [0,0]
beliebige Koordinaten
Makefiles können manchmal sehr hilfreich sein. Je größer das Projekt, desto größer der Nutzen. Aber selbst damit erspart Ihnen mein kleinstes C ++ - Projekt, wie Sie an Beispielen sehen können, viele Kopfschmerzen.
quelle
make
ist ziemlich zuverlässig verfügbar. Wenn Sie Ihr Projekt mit a verteilenmakefile
, erhalten Benutzer eine einfache Referenz, wie Sie Aufgaben auf die gleiche Weise wie Sie ausführen können. Dasmakefile
kann für mehr als nur Kompilierung sein.Nehmen Sie zum Beispiel ein Projekt, das nicht kompiliert werden muss. Ich erinnere mich, dass ich an einem Python-Projekt gearbeitet habe, das einen Befehl make zum Löschen aller
.pyc
Dateien, einen Befehl make zum Ausführen der Tests, einen Befehl zum Herunterladen einer Kopie der statischen Daten vom Entwicklungsserver usw. hatte.quelle