Niemand schreibt jemals ein Makefile. Sie nehmen ein vorhandenes Makefile und ändern es.
Sei nur dankbar, dass du dich nicht mit IMakefile befassen musst. (Für diejenigen unter Ihnen, die das Glück hatten, sich nie damit zu befassen, oder die es geschafft haben zu vergessen, war IMakefile eine Datei, die ein Meta-Makefile für X Window System-basierte Projekte war, mit dem ein Makefile erzeugt werden konnte, das es wusste wo du all deine X Windows Libraries und Binaries installiert hast. Es ist unnötig zu sagen, dass es gesaugt hat.
Das Einrichten eines sinnvollen Build-Systems ist Teil des Handwerks. Ich würde erwarten, dass jeder Nicht-Super-Junior-Entwickler ein Makefile erstellen kann.
So oft wie er aufgefordert wird, ein brandneues Projekt zu starten, das einem bestehenden Projekt, dessen Build-Skripte angepasst werden können, nicht ähnlich ist. Das ist keine gute Antwort, aber meiner Erfahrung nach gab es schon immer Code / Ressourcen / Build-Skripte, die ich anpassen kann.
Anders gesagt, für jeden C ++ - Programmierer ist es wichtig zu erfahren, wie sein Code aufgebaut ist. Makefiles, Ant-Skripte usw. sind nur der Implementierungsmechanismus. Also ich denke, es ist wichtig genug zu lernen.
Programmierer müssen wissen, wie sie ihre Projekte erstellen. Normalerweise (nach meiner Erfahrung) basiert der 'production build' auf dem Makefile des ursprünglichen Programmierers. Viele Programmierer gehen ihre ganze Karriere nur blind herum, wenn sie ihre Makefiles zusammenstellen, aber jeder Programmierer muss es tun.
Ich habe Makefiles nie als Probleme betrachtet, sie sind ziemlich nützlich ...
Die Häufigkeit hängt von der verwendeten Plattform und Ihrer Rolle ab.
Zum Beispiel gibt es in einigen Organisationen eine ziemlich feste Build-Datei, die sich nicht oft ändert, während in anderen häufig Änderungen vorgenommen werden. Einige Organisationen verlassen sich auf die IDE, um mit dem Build usw. fertig zu werden. Sie müssen nicht der Bauingenieur sein.
Ich denke, dass die meisten C / C ++ - Entwickler zumindest ein grundlegendes Verständnis davon haben sollten, wie Makefiles funktionieren, obwohl sie keine Gurus sein müssen. In meiner Alma Mater, das ist ein Teil des ersten Jahres CS.
Zu beachten ist, dass, wenn das Build-System modular aufgebaut ist, es nicht üblich ist, ein riesiges Makefile für das Ganze zu erstellen, sondern Makefiles für Bits, die rekursiv vom Master-Makefile aufgerufen werden können. Dies ist ein großartiges Feature, da es bedeutet, dass verschiedene Produkte (Bibliotheken?) Als separate Einheiten gebaut werden können, oft parallel.
Makefiles wurden entwickelt, um den Build-Prozess zu automatisieren. Daher sind sie definitiv keine lästige Pflicht; Sie ersparen Ihnen das Schreiben von gcc -c *.c
etc die ganze Zeit. Nicht nur das, aber ein richtig geschriebenes Makefile hat Phonies zum Säubern, Neuaufbau usw. Bei den meisten meiner Projekte macht make rebuild
genau das - säubert alles und beginnt neu.
Makefiles sind wirklich nützlich. Ich kann das nicht genug sagen.
Selbst wenn Sie eine IDE verwenden, die sich mit den Details der Erstellung des Projekts beschäftigt, können Makefiles immer noch sehr nützlich sein. Gelegentlich benötigen Sie einige zusätzliche Funktionen als Teil Ihres Build-Prozesses, um beispielsweise einen Vorverarbeitungsschritt auszuführen, um eine C ++ - Datei programmgesteuert zu generieren (wenn Sie Qt verwenden, müssen Sie möglicherweise moc
für Ihre Header-Dateien oder% ausführen co_de% für Ihre Ressourcendateien (möglicherweise müssen Sie eine IDL-Datei verarbeiten, um eine Implementierungsdatei zu generieren) oder als Post-Build-Schritt zum Kopieren von Dateien an ein Ziel. In diesen Fällen haben Sie normalerweise zwei Möglichkeiten:
Ein C ++ - Entwickler kann viele Jahre gehen, ohne ein Makefile zu erstellen, wenn er nicht unter Linux / Unix arbeitet, aber ein anständiger Entwickler wird versuchen, zu verstehen, wie Makefiles funktionieren, da sie wahrscheinlich einen Teil Ihres aktuellen Workflows verbessern werden.
Ich nehme an, es kommt darauf an ...
Persönlich bin ich ziemlich fasziniert von der Syntax von Makefiles. Jede Art von Operation in simple
auf den Pfaden des Objekts ist so schwierig.
Auf der anderen Seite ist es einfach notwendig zu bauen und die verschiedenen Argumente in der Kompilierzeile zu verstehen. Obwohl vielleicht nicht für einen Junior.
Ich musste das Build-System unserer Anwendung knapp ein Jahr nach meiner Schulzeit neu schreiben. Ich habe es mit scons
gemacht und es hat super funktioniert. Die Bauzeit ging von 1h30 auf knapp 10m, da ich endlich eine parallele Kompilierung durchführen konnte und eine automatische lokale Replikation der verwendeten Bibliotheken vornahm.
Die Moral ist: Wenn Sie jemanden bitten, einen Build-Mechanismus aufzuheben, erzwingen Sie Makefile
nicht auf ihn. Lassen Sie ihn ein neueres Werkzeug auswählen.
Ein wichtiger Teil von make ist der Shell-Code, den Sie in jede Regel schreiben können. Es ist also nicht nur wichtig, make zu lernen, sondern es ist auch sehr hilfreich, eine Shell-Sprache wie bash zu verstehen und sie auf ein Projekt anzuwenden.
Es hängt von den Werkzeugen / Bibliotheken / Frameworks ab, die Sie für Ihr Projekt verwenden. Für meinen Job code ich Qt, so dass ich nie ein Makefile schreiben muss, da qmake
es für mich tut, obwohl ich wissen muss, wie man stattdessen eine qmake
-Projektdatei erstellt.
Ich gebe zu, dass ich wahrscheinlich über das einfachste Makefile hinaus nichts schreiben konnte, ohne es von Grund auf neu lernen zu müssen. Ich sehe nicht, dass sich das bald ändern wird, da ich es nur lernen würde, wenn ich dazu gezwungen würde. Warum etwas lernen, das du vielleicht nie brauchst?
Ich wurde in den letzten fünf Jahren nicht gebeten, ein Makefile zu schreiben. Manchmal konnte ich ein vorhandenes Makefile ändern.
Aber wenn Sie Tools haben, die den Job ohne das make-Programm erstellen, ist es nicht notwendig, sich um Makefiles zu kümmern. In Bezug auf Ihre Frage, wenn ein C ++ - Programmierer aufgefordert wurde, eine solche Datei zu schreiben : Es kommt darauf an.
Tags und Links compilation c++ makefile