Seite 1 von 1

Build Tools

Verfasst: 10.08.2022, 12:08
von starcow
Tach zusammen :-)
Mich würde eure Meinung zum Thema Build Systeme interessieren.
Ich bin da auf ein Video von Casey Muratori gestossen, indem er ausführt, wieso er sämtliche Build Tools ablehnt.
War ich dann doch etwas überrascht, dass er das Ganze so konsequent durchzieht. Und der Mann gilt ja als Koryphäe.

https://youtu.be/Ee3EtYb8d1o?t=1185
(Seine Ausführungen zum Thema ca. 3 - 4min)

Die Frage, die sich jetzt natürlich stellt: Hat er vielleicht recht? Also ich meine, solange man nicht gerade einen Kernel kompiliert. :-)

Ich frage mich einfach, ob vielleicht ein sinnvoller Kompromiss möglich wäre. Nach dem Schema: Wird eine c. Datei verändert, wird nur die entsprechende Translation-Unit neu compiliert. Wird hingegen eine Header-Datei verändert, wird halt einfach nochmals alles neu compiliert.

Denn ich hab den Eindruck, dass es eigentlich erst dann kompliziert wird, wenn Header-Dateien verändert werden. Nur bei diesen kann man "von aussen" nicht erkennen, wo tatsächlich Abhängigkeiten bestehen. Solange man nur .c Dateien verändert und diese auch konsequent nirgends eingebunden werden, sollte doch eigentlich alles ziemlich transparent bleiben, oder?

Re: Build Tools

Verfasst: 10.08.2022, 12:39
von Krishty
Deploy-Builds habe ich lange Zeit auch via Batch-Datei kompiliert. Die Vorteile nennt er ja, aber Nachteile wären
  • völlig verhunzte Syntax (insbesondere konkrete Fehler abfangen ist ein Graus)
  • Probleme mit Leerzeichen und Sonderzeichen
  • Viiiieeel Wiederholung.
Als Beispiel für den letzten Punkt: Irgendwann hast du in deinen Projekten mal zwei Quelldateien gleichen Namens in unterschiedlichen Ordnern. Wenn du für verschiedene Zielarchitekturen kompilierst oder Drittbibliotheken nutzt. Nun musst du deinem Build-Ordner eine Struktur geben, und dafür machst du dann eine Wand aus mkdir-Aufrufen, die mit den Parametern der Compiler-Aufrufe synchron bleiben müssen.

Build-Systeme nehmen dir sowas ab, aber mit den Nachteilen, die er anspricht. Für mich lag der Break-Even-Point bei Ninja (erzeugt alle Zielordner für dich; unterstützt Leer- und Sonderzeichen; fast so low level wie eine Batch-Datei, aber mit extrem minimierter Syntax). Andere Leute ziehen schon bei CMake die Linie, weil es ihnen sonst zu Low-Level wird. Casey hat nichtmal ein Problem mit Batch. YMMV.

Re: Build Tools

Verfasst: 10.08.2022, 12:49
von Alexander Kornrumpf
starcow hat geschrieben: 10.08.2022, 12:08 Casey Muratori [...] Und der Mann gilt ja als Koryphäe.
Dazu meta: Ich denke es ist wichtig dass wir Stimmen wie seine und Jon Blow's haben. Auch wenn ich nicht allem zustimme, was die beiden so erzählen, macht es uns mMn zu besseren Programmierern diese Stimmen zu _kennen_. Aber du solltest wissen dass das Außenseitermeinungen sind, die gerade nicht den current Mainstream vertreten - also gerade nicht das was man normalerweise mit "gilt als Koryphäe" meint.

Und es ist halt wie immer bei so Bilderstürmer-Geschichten. Du musst den Mainstream erstmal _verstehen_ bevor du sinnvoll mit seinen Regeln brechen kannst. Die beiden tun das zweifellos. Das heißt aber nicht, dass CMake nicht für 95% aller Anwender die bessere Wahl ist, weil die 95% eben gerade nicht das tiefe Verständnis von Casey oder Jon haben.

Ich bin sehr einverstanden mit deren Ziel, dass idealerweise alle Programmierer dieses Verständnis entwickeln und das kann man nur wenn man ohne die Stützräder moderner Tools fährt, alles richtig. Die Frage ist aber dann: "wo anfangen"? Alles gleichzeitig hinter sich zu lassen ist für einen Anfänger nicht zu empfehlen. Ich würde raten zu priorisieren.

Re: Build Tools

Verfasst: 10.08.2022, 15:43
von starcow
Krishty hat geschrieben: 10.08.2022, 12:39 Deploy-Builds habe ich lange Zeit auch via Batch-Datei kompiliert. Die Vorteile nennt er ja, aber Nachteile wären
  • völlig verhunzte Syntax (insbesondere konkrete Fehler abfangen ist ein Graus)
  • Probleme mit Leerzeichen und Sonderzeichen
Sorry, ich kann dir grad nicht ganz folgen. Meinst du mit Syntax den Warning und Error Output des Compilers?

@Alexander Kornrumpf
Danke für deine Ausführung. Sehr diplomatisch auf den Punkt gebracht. :-)

Re: Build Tools

Verfasst: 10.08.2022, 22:53
von Krishty
starcow hat geschrieben: 10.08.2022, 15:43
Krishty hat geschrieben: 10.08.2022, 12:39 Deploy-Builds habe ich lange Zeit auch via Batch-Datei kompiliert. Die Vorteile nennt er ja, aber Nachteile wären
  • völlig verhunzte Syntax (insbesondere konkrete Fehler abfangen ist ein Graus)
  • Probleme mit Leerzeichen und Sonderzeichen
Sorry, ich kann dir grad nicht ganz folgen. Meinst du mit Syntax den Warning und Error Output des Compilers?
Nein, die Syntax des Build-Skripts. Batch ist ein Horror von Sprache; das beginnt mit @echo off am Anfang und wird eigentlich nur noch schlimmer. UTF-8-Unterstützung ist auch noch recht frisch (oder gab es die nur für PowerShell?)

Zugegeben, Bash ist sauberer und Make kann ebenfalls ein Alptraum sein ($(CXX) $(CXX_FLAGS) -MMD -c $< -o $@), aber so ziemlich alle anderen Build-Systeme sind halbwegs verständlich. Größere Dinge direkt in Batch zu programmieren ist blanker Masochismus.