Ich benutze seit vielen Jahren make und makefiles und obwohl das Konzept solide ist, lässt die Implementierung zu wünschen übrig.
Hat jemand gute Alternativen gefunden, um das Problem nicht zu komplizieren?
Ich benutze seit vielen Jahren make und makefiles und obwohl das Konzept solide ist, lässt die Implementierung zu wünschen übrig.
Hat jemand gute Alternativen gefunden, um das Problem nicht zu komplizieren?
scons
, luigi
(angepasst shouldsee/luck
) snakemake
, waf
. Es gibt viele Java-Alternativen, aber dieser Speicherplatz ist zu klein, um sie alle aufzuschreiben.
Antworten:
Schauen Sie sich SCons an . Zum Beispiel nutzen Doom 3 und Blender es.
Ich habe viele Freunde, die CMake für die plattformübergreifende Entwicklung schwören:
Es ist das Build-System, das unter anderem für VTK verwendet wird, eine C ++ - Bibliothek mit plattformübergreifenden Python-, Tcl- und Java-Bindungen. Ich denke, es ist wahrscheinlich die am wenigsten komplizierte Sache, die Sie mit so vielen Funktionen finden werden.
Sie können immer die Standard- Autotools ausprobieren . Automake-Dateien lassen sich recht einfach zusammenstellen, wenn Sie nur unter Unix arbeiten und sich an C / C ++ halten. Die Integration ist komplizierter und Autotools sind alles andere als das einfachste System aller Zeiten.
doit ist ein Python-Tool. Es basiert auf den Konzepten von Build-Tools, ist aber allgemeiner.
Einige der GNOME-Projekte wurden auf waf migriert .
Es basiert auf Python, wie Scons, ist aber auch eigenständig. Anstatt dass andere Entwickler Ihr bevorzugtes Build-Tool installieren müssen, kopieren Sie einfach das eigenständige Build-Skript in Ihr Projekt.
ninja
Beachten Sie das Build-Tool (v1.8.2 Sept 2017), das von tup
und beeinflusst wird redo
.
Der Build-Datei-Generator cmake
(z. B. für Unix-Makefiles, Visual Studio, XCode, Eclipse CDT ninja
usw. ) kann seit Version 2.8.8 (April 2012) auch Build-Dateien generieren und ninja
ist jetzt sogar das Standard-Build-Tool von cmake
.
Es soll das make
Tool übertreffen (bessere Abhängigkeitsverfolgung und ist auch parallelisiert).
cmake
ist ein bereits etabliertes Tool. Sie können das Build-Tool später jederzeit auswählen, ohne Ihre Konfigurationsdateien zu ändern. Wenn also in Zukunft ein besserer Build entwickelt wird, der von cmake
Ihnen unterstützt wird , können Sie bequem darauf umsteigen.
Beachten Sie, dass für c / c ++ die Verbesserung der Kompilierungszeit manchmal begrenzt ist, da Header über den Präprozessor enthalten sind (insbesondere bei Verwendung von Nur-Header-Bibliotheken, z. B. boost & eigen ), die hoffentlich durch den Vorschlag von Modulen (in einer technischen Überprüfung) ersetzt werden von c ++ 11 oder eventuell in c ++ 1y). In dieser Präsentation finden Sie Details zu diesem Problem.
tup
davon ab, fuse
ob die Sicherungskernerweiterung ausgeführt wird, was meiner Meinung nach darauf hindeutet, dass die Betreuer verrückt sind. redo
wurde seit zwei Jahren nicht mehr aktualisiert. Ich würde empfehlen ninja
.
Ich habe ein Tool namens Sake geschrieben , mit dem versucht wurde, das Schreiben von Makefile-ähnlichen Dingen sehr einfach zu lesen und zu schreiben.
make
Syntax.
Es hängt irgendwie davon ab, was Sie versuchen zu tun. Wenn alle Sie Make-Stil Ziel Abhängigkeiten und Befehlsaufruf ist, dann ist Make tatsächlich eines der besseren Tools für die Aufgabe. :-) Rake ist sehr schön, kann aber in einigen einfachen Fällen ungeschickt sein. Ant ist natürlich eine Stadt der Ausführlichkeit, aber es bietet eine bessere Unterstützung für den Aufbau von Java-ähnlichen Sprachen (einschließlich Scala und Groovy). Außerdem ist Ant überall verfügbar . Das ist der Hauptgrund, warum ich es benutze. Da es unter Windows konsistent funktioniert, ist es sogar noch plattformübergreifender als Make.
Wenn Sie das Abhängigkeitsmanagement für Java-ähnliche Bibliotheken wünschen, ist Maven die kanonische Wahl, aber ich persönlich mag Buildr viel besser. Es ist schneller und viel einfacher anzupassen (es basiert auf Rake). Leider ist es noch nicht so allgegenwärtig wie Maven.
Rubys Make-System heißt Rake: http://rake.rubyforge.org/
Sieht ziemlich vielversprechend aus.
Es gibt immer Ant: http://ant.apache.org , was ich persönlich für schrecklich halte. Dies ist jedoch der De-facto-Standard für die Java-Entwicklung.
Ich bevorzuge es immer noch zu machen, nachdem ich einige der Alternativen in Betracht gezogen habe. Wenn Sie Abhängigkeiten entweder über den Compiler oder über Fastdep automatisch generieren, bleibt nicht viel zu tun. Insbesondere möchte ich nicht, dass mein Build-Skript an die Implementierungssprache gebunden ist, und ich schreibe nicht gerne in XML, wenn besser lesbare Alternativen verfügbar sind. Ein Werkzeug, das eine Allzwecksprache verfügbar macht, hat zwar Vorteile, eine andere interpretierte Sprache jedoch nicht (afaik). Was ist falsch an Make? könnte Ihren Standpunkt über die Abkehr von make ansprechen.
/ Allan
FlowTracer von RTDA ist eine weitere gute Wahl, die ich kommerziell in einer großen Umgebung (Zehntausende von Jobs) gesehen habe: http://www.rtda.com/flowtracer-design-flow-infrastructure-software
Es verfügt über eine grafische Benutzeroberfläche, die das Abhängigkeitsdiagramm mit farbcodierten Feldern für Jobs und Ovalen für Dateien anzeigt. Wenn die Anzahl der Jobs und Dateien hoch wird, ist ein GUI-basiertes Tool wie FlowTracer ziemlich wichtig.
Die anfänglichen Einrichtungskosten sind höher als bei Make. Es gibt eine Lernkurve zum Einrichten Ihres ersten Flusses damit. Danach wird es schneller.
Ich bin mir nicht sicher, ob Sie hier die richtige Frage stellen.
Bist du nach einer vereinfachten Marke? In diesem Fall benötigen Sie jemanden, der mit make sehr vertraut ist, um eine Reihe von (M | m) Akefiles zu erstellen, die Ihr Problem vereinfachen.
Oder möchten Sie sich die zugrunde liegende Technologie ansehen? Wollen wir eine Architektur vom Typ Design-by-Contract erzwingen, die in das Code-Design integriert und in dieses erzwungen wird? Oder möglicherweise die Sprache selbst, zB Ada und ihr Konzept von Spezifikationen (Schnittstellen) und Körpern (Implementierungen)?
Welche Richtung Sie verfolgen, wird definitiv die möglichen Ergebnisse einer solchen Frage beeinflussen?
Grundsätzlich gibt es neue Möglichkeiten, Systeme nur aus den Komponenten zu erstellen, die sich wirklich geändert haben, gegenüber der Einführung neuer Technologien, bei denen solche Mechanismen vom Entwurf her eingebaut sind.
Entschuldigung, es ist keine direkte Antwort. Ich wollte nur versuchen, Sie dazu zu bringen, zu bewerten, welchen Weg Sie einschlagen wollten.
Prost,
rauben
make
ist es zu simpel.