7 Stimmen

Wie oft wird ein Programmierer gebeten, eine Makefile-Datei zu schreiben?

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?

1voto

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.

1voto

the_mandrill Punkte 28354

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.

1voto

Matthieu M. Punkte 266317

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.

1voto

Trevor Hickey Punkte 33864

Ein leistungsstarker 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 auch eine Shell-Sprache wie Bash zu verstehen und sie auf ein Projekt anzuwenden, ist sehr nützlich

0voto

Troubadour Punkte 13047

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X