Ist makefile ein fortgeschrittenes Problem oder ein allgemeines Problem für einen Programmierer? Wie oft wird ein C++-Programmierer gebeten werden, eine makefile-Datei zu schreiben?
Antworten
Zu viele Anzeigen?Eine Sache, die zu beachten ist, ist, dass, wenn das Build-System auf eine modulare Art und Weise eingerichtet ist, eine Praxis ist, nicht ein riesiges Makefile für die ganze Sache zu bauen, sondern Makefiles für Bits, die vom Master-Makefile rekursiv 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 sind dazu gedacht, den Build-Prozess zu automatisieren. Daher sind sie definitiv keine lästige Pflicht; sie ersparen Ihnen das Schreiben von gcc -c *.c
usw. die ganze Zeit. Nicht nur das, ein richtig geschriebenes Makefile hat auch Pseudos für clean, rebuild usw. Bei den meisten meiner Projekte, make rebuild
macht genau das - reinigt alles und fängt von vorne an.
Makefiles sind wirklich nützlich. Das kann ich gar nicht oft genug sagen.
Auch wenn Sie eine IDE verwenden, die sich um die Details der Projekterstellung kümmert, können makefiles sehr nützlich sein. Gelegentlich benötigen Sie einige zusätzliche Funktionen als Teil Ihres Build-Prozesses, zum Beispiel um einen Vorverarbeitungsschritt auszuführen, um eine C++-Datei programmatisch zu erzeugen (wenn Sie Qt verwenden, müssen Sie möglicherweise moc
auf Ihre Header-Dateien oder rcc
auf Ihre Ressourcendateien. Möglicherweise müssen Sie eine .idl-Datei verarbeiten, um eine Implementierungsdatei zu generieren), oder als Post-Build-Schritt, um Dateien an einen Zielort zu kopieren. In diesen Fällen haben Sie normalerweise zwei Möglichkeiten:
- die Skripte jedes Mal als Pre- oder Post-Build-Schritte ausführen, was bedeutet, dass die Anwendung jedes Mal neu erstellt wird, wenn Sie sie erstellen
- ein Makefile zu erstellen, das die Aktion ausführt, die die Abhängigkeitsregel damit der Schritt nur aufgerufen wird, wenn der Zeitstempel der Eingabedatei neuer ist als der der Ausgabedatei. Die Erstellung eines Projekts, das bereits auf dem neuesten Stand ist, bewirkt nichts
Ein C++-Entwickler wird vielleicht viele Jahre lang kein Makefile erstellen müssen, 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 derzeitigen Arbeitsablaufs verbessern werden.
Ich nehme an, es kommt darauf an...
Ich persönlich bin ziemlich fasziniert von der Syntax von Makefiles. Wenn man irgendeine Art von selbst einer simple
Operation auf den Pfaden des Objekts ist immer so knifflig.
Andererseits muss man in der Lage sein zu kompilieren, und die verschiedenen Argumente in der Kompilierzeile zu verstehen, ist ebenfalls wichtig. Aber vielleicht nicht für einen Junior.
Kaum ein Jahr, nachdem ich die Schule verlassen hatte, musste ich das Build-System unserer Anwendung neu schreiben. Ich tat es mit scons
und es hat wunderbar funktioniert. Build-Zeit ging von 1h30 bis kaum 10m, weil ich endlich in der Lage war, parallele Kompilierung zu haben und setzen eine automatische lokale Replikation der Bibliotheken verwendet in Ort.
Die Moral von der Geschicht' ist: Wenn du jemanden bittest, einen Baumechanismus aufzuheben, dann zwinge ihn nicht Makefile
auf ihn. Lassen Sie ihn ein neueres Werkzeug wählen.
Das hängt von den Tools/Bibliotheken/Frameworks ab, die Sie für Ihr Projekt verwenden. Für meine Arbeit programmiere ich mit Qt, so dass ich nie ein Makefile schreiben muss, da qmake
für mich, obwohl ich wissen muss, wie man eine qmake
stattdessen die Projektdatei.
Ich gebe freimütig zu, dass ich wahrscheinlich nicht mehr als das einfachste Makefile schreiben könnte, ohne alles von Grund auf neu lernen zu müssen. Ich glaube nicht, dass sich das in nächster Zeit ändern wird, da ich es nur lernen würde, wenn ich dazu gezwungen wäre. Warum etwas lernen, das man vielleicht nie braucht?