Ich arbeite in C ++ hauptsächlich als Hobby (ich bin noch in der Schule und habe daher keinen richtigen Job). Die IDEs generieren das Makefile für mich und ich frage mich, ob es sich lohnt, zu lernen, wie man sie selbst erstellt. Mit "lernenswert" meine ich, sollte ich alles fallen lassen und lernen, wie man sie schreibt, bevor ich mit dem Erlernen von c ++ fortfahre? Wird es wirklich notwendig sein, sie zu lernen? Wenn ja, sollte ich etwas über sie lernen (allgemeine Syntax und Verständnis, wie sie funktionieren usw.) oder wirklich lernen, wie man sie schreibt?
12
Antworten:
Ja, es lohnt sich auf jeden Fall zu verstehen, wie Makefiles funktionieren. Es ist momentan möglicherweise nicht relevant für Sie (da Sie eine IDE verwenden, die sie generiert), aber es besteht die Möglichkeit, dass das Wissen in Zukunft nützlich sein wird.
Ehrlich gesagt, das ist eine bizarre Vorstellung von "lernenswert" ...
Aber nein, ich glaube nicht, dass Sie das tun müssen.
Wir können nicht vorhersagen, ob Sie dieses Wissen in Zukunft wirklich benötigen werden. Es hängt davon ab, ob Sie mit der C ++ - Programmierung fortfahren und in welchem Kontext Sie dies tun.
Ich würde beides empfehlen. Wenn Sie kein Makefile schreiben können, ist es fraglich, ob Sie wissen, was los ist.
Es gibt den anderen Standpunkt, der besagt, dass zu viel Wissen nicht hilfreich ist.
Wenn Sie sich eingehend damit befassen, werden Sie feststellen, dass es viele verschiedene Versionen von Make gibt und dass es schwierig ist, ein kompliziertes Makefile zu schreiben, das mit mehreren Versionen von Make auf mehreren Plattformen funktioniert. Doch in der Open - Source - Welt, ist es „best practice“ zu bedienende Werkzeuge , wie
automake
,autoconf
und so weiter , die Makefiles zu erzeugen, etc. Wenn Sie das tun, eine Menge von der Version / Plattform im Zusammenhang Komplexität mit hinter den Kulissen ausgeteilt .Schließlich haben Sie die Frage mit "Java" markiert. Meiner
make
Meinung nach sollten Sie keine Java-Anwendungen erstellen (es sei denn, Sie erstellen auch native Codebibliotheken). Es gibt Java-spezifische Build-Tools, die viel einfacher zu verwenden sind ... und einen besseren Job machen alsmake
.quelle
Wenn Sie mit Open Source- oder Unix-ähnlichen Betriebssystemen arbeiten, ja. Nehmen Sie das Herz, sie sind nicht so kompliziert. Lernen
make
spart Ihnen auf lange Sicht viel Zeit.quelle
Makefiles sind auf UNIX-Systemen (zB AIX, Linux, OS X) wichtig. Ich denke jedoch, dass ihre absolute Wichtigkeit "du musst es wissen" in den letzten Jahren abgenommen hat. Beispielsweise finden Sie sie in der Windows-Entwicklung (Visual Studio usw.) nicht wirklich, und XCode (unter OS X) verwendet insgesamt ein anderes System. Ich mag Java nicht sonderlich, aber ich glaube, dort werden Ameisendateien und so weiter verwendet.
Es gibt ein sehr cooles System namens CMake, das native Build-Dateien für das Betriebssystem generiert, auf dem Sie gerade ausgeführt werden. Wenn Sie beispielsweise Ihre Projektspezifikation in CMake schreiben, können Sie ein Visual Studio-Buildprojekt unter Windows, ein XCode-Projekt unter Mac und ein Makefile unter Linux erstellen. In gewisser Weise ersetzt CMake autoconf und automake.
Normalerweise erstelle ich CMake-Dateien für meine "großen Projekte", aber ich kenne Make für den Fall, dass ich ein schnelles Makefile schreiben möchte. Es ist gut für Ihre kulturelle Kompetenz, da es Unmengen von Softwarebibliotheken gibt, die Makefiles verwenden, und Sie müssen zwangsläufig die spezifischen Compiler und Bibliotheksspeicherorte bearbeiten. Sie werden jedoch feststellen, dass große Projekte (wie KDE) auf CMake und dergleichen migrieren, da Make einige Einschränkungen aufweist, die bei komplizierten Projekten einen unschönen Eindruck hinterlassen.
quelle
Ich bin voreingenommen, da ich denke, dass Makefiles ein schreckliches System sind. Sie sollten sich mit der allgemeinen Syntax vertraut machen, damit Sie ein vorhandenes Makefile ändern können. Aber ich denke nicht, dass es nützlich ist, alles darüber zu lernen oder es von Grund auf neu zu machen.
quelle
Wie bei vielen Aspekten der IDE-Ausgabe ist ein typisches automatisch generiertes Makefile häufig ineffizient strukturiert.
Mit einem angemessenen Verständnis ist es häufig möglich, die Leistung erheblich zu verbessern (schnellere Builds usw.). Wenn Sie jedoch nicht genau wissen, was los ist, wird FUBAR Sie eher treffen, wenn Sie mit einer automatisch erstellten Datei fummeln.
Es wird dringend empfohlen, zu verstehen, was gerade vor sich geht. Ob Sie anschließend eine vorhandene bearbeiten oder eine eigene erstellen, ist eine separate Angelegenheit.
quelle
In der Lage zu sein, erfolgreich zu verwenden
make
oder so, lässt Sie das Kontrollkästchen "versteht, wie die Abhängigkeiten zwischen Teilen eines Programms modelliert werden, das aus mehr als einem Modul besteht" überprüfen.quelle
Das Schreiben von Makefiles ist aus mehreren Gründen eine gute Idee.
quelle
Sie sollten immer versuchen, das von Ihnen verwendete Build-System zu verstehen.
Das bedeutet nicht unbedingt, dass Sie in der Lage sein müssen, alle Build-Dateien von Hand zu erstellen. Der wichtige Teil besteht darin, zu verstehen, was das Build-System für Ihr Projekt tut, und die allgemeine Fähigkeit, kleine Projekte manuell zu kompilieren (wie unter "Befehle auf einem Terminal eingeben").
Ich neige dazu zu denken, dass das Erstellen von (einfachen) Makefiles der einfachste Schritt ist, um zu verstehen, was vor sich geht, aber Sie haben möglicherweise andere Mittel, um zu verstehen, wie man Dinge erstellt.
Warum / wann Makefiles lernen?
Wenn Sie weiterhin nur für Windows programmieren und nicht erwarten, dass andere Ihren Code kompilieren, können Sie den Code nach Ihren Wünschen kompilieren.
Wenn Sie den Compiler agnostisch programmieren möchten (wie in "Lassen Sie andere entscheiden, welchen Compiler oder welche IDE sie verwenden möchten"), sollten Sie ein anderes Build-System erlernen, als nur Ihre IDE "damit umgehen zu lassen".
Wenn Sie für verschiedene Plattformen programmieren möchten, müssen Sie auf jeden Fall ein weit verbreitetes Build-System verwenden.
Das bedeutet immer noch nicht, dass Sie wissen müssen, wie die automatisch generierten Makefiles im Detail funktionieren. Sie müssen nur wissen, wie die Eingabedateien für das Buildsystem funktionieren. Diese haben manchmal eine ähnliche Syntax.
Ich persönlich mag Makefiles sehr und benutze sie für viele Dinge. Nicht nur Code kompilieren. Ich erstelle ein Makefile für jedes größere PDF, das ich erstelle (mit LaTeX), und für jedes Projekt, in dem ich einige Aufgaben automatisieren muss (Erstellen, Packen, Hochladen, Aktualisieren von Abhängigkeiten aus Quell-Repositorys, manuelle Backups ziehen / verschieben).
Ich arbeite jedoch viel am Terminal und arbeite mit Linux. Ich verwende keine andere IDE als vim (leistungsstarker Texteditor) und Konsolentools. Dies könnte für Sie sehr unterschiedlich sein.
Wenn Sie sich jemals darüber beschwert haben, verschiedene wiederkehrende Befehle ausführen zu müssen, nur um / package / upload / .. ein "Projekt" zu "aktualisieren", könnte es hilfreich für Sie sein, zu lernen, wie man Makefiles schreibt.
Wenn Sie Tools / GUIs / IDEs für alles haben und verwenden, können Sie dieses Wissen möglicherweise nicht nutzen.
quelle