+1 für "Viele, und sie sind schrecklich."
Aber das "reichste" und "skalierbarste" ist wahrscheinlich CMake , ein Makefile-Generator (generiert auch natives MSVC ++ *.proj
/ *.sln
). Seltsame Syntax, aber sobald Sie sie gelernt haben, können Sie Builds für verschiedene Plattformen erstellen. Wenn ich "frisch anfangen" würde, würde ich wahrscheinlich verwenden CMake
. Es sollte Ihre Liste behandeln, obwohl Ihre "Code-Generierung" über das Build-System hinaus ein "Eigenleben" annehmen könnte, je nachdem, was Sie tun möchten. (Siehe unten.)
Für einfache Projekte ist der QMake- Generator in Ordnung (Sie müssen die Qt-Bibliotheken nicht verwenden, um QMake zu verwenden). Sie beschreiben jedoch nicht "einfach" - Codegenerierung und "Extraphasen" bedeuten, dass Sie wahrscheinlich CMake
etwas mit einer umfangreichen API für Ihre eigenen Erweiterungen wie Scons
(oder Waf
) möchten .
Wir verwenden Scons bei der Arbeit. Es produziert "kugelsichere Builds", aber es ist sehr langsam. Kein anderes System ist so kugelsicher wie Scons
. Aber es ist langsam. Es ist in Python geschrieben und wir haben die Schnittstelle für unsere "Workspace-Organisation" erweitert (wo wir lediglich Modulabhängigkeiten angeben), und das ist Teil der Scons
Entwurfsabsicht (diese Art der Erweiterung durch Python). Praktisch, aber Builds sind langsam. Sie erhalten kugelsichere Builds (jede Entwicklerbox kann die endgültige Version erstellen), aber es ist langsam. Und es ist langsam. Vergessen Sie nicht Scons
, dass es langsam ist , wenn Sie es verwenden . Und es ist langsam.
Es macht mich krank zu glauben, dass wir ein Jahrzehnt nach dem Jahr 2000 immer noch keine fliegenden Autos haben. Wir werden wahrscheinlich noch hundert Jahre warten müssen oder so, um sie zu bekommen. Und dann werden wir wahrscheinlich alle in unseren fliegenden Autos herumfliegen, die noch mit beschissenen Bausystemen gebaut werden.
Ja, sie sind alle schrecklich.
[ÜBER CODE-GENERATION]
Scons
arbeitet an "Phasen" und sie sind "etwas statisch". Es kann Code erstellen, der als Teil des Builds generiert wird (die Leute tun dies auf verschiedene Arten), aber dies wurde als "etwas sehr Un-Scons-ähnliches" beschrieben.
Wenn es einfach ist, "einige Dateien vorzuverarbeiten und Quelldateien zu generieren", dann kein Problem (Sie haben viele Optionen, und aus diesem Grund qmake
wurde geschrieben - für die moc
Vorverarbeitung von *.hpp/*.cpp
Dateien).
Wenn Sie dies jedoch auf "schwere Weise" tun, müssen Sie Ihr eigenes Skript erstellen. Zum Beispiel hatten wir als Teil des Builds Skripte, die die Datenbanken abfragten und C ++ - Klassen generierten, um eine Schnittstelle zwischen den "Ebenen" herzustellen (in der traditionellen dreistufigen Anwendungsentwicklung). In ähnlicher Weise haben wir Server- / Client-Quellcode über IDLs und eingebettete Versionsinformationen generiert, damit mehrere Clients / Server gleichzeitig mit verschiedenen Versionen ausgeführt werden können (für denselben "Client" oder "Server"). Viel generierter Quellcode. Wir könnten "so tun", als wäre es "das Build-System", aber tatsächlich ist es eine nicht triviale Infrastruktur für das "Konfigurationsmanagement", von dem ein Teil das "Build-System" ist. Zum Beispiel musste dieses System "abnehmen" und "