Gibt es gute Erstellungstools für ein C++-Projekt, die make ersetzen können?
-
09-06-2019 - |
Frage
Ich frage mich, ob es ein nettes und nettes Tool gibt, das die GNU Autotools oder Make ersetzt, um ein sehr großes C++-Projekt zu erstellen, deren Verwendung so kompliziert ist.
Es ist einfach, alle Dateien zu generieren, die Autotools benötigt, wenn das Projekt klein ist, aber wenn der Quellcode in viele Verzeichnisse aufgeteilt ist, mit mehreren Bibliotheken von Drittanbietern und vielen Abhängigkeiten, geraten Sie in die „Autotools-Hölle“.
Vielen Dank für alle Empfehlungen
Lösung
Die Google V8 JavaScript-Engine in C ++ geschrieben ist und verwendet SCons , also denke ich, dass eine Stimme für seine
.Andere Tipps
Hier finden Sie aktuelle waf .
Ich glaube, Sie es als vollwertiger Ersatz für Hersteller und Autotools berücksichtigen können. Es basiert auf Python. Eine Sache, die ich über waf mag, ist, dass das waf Skript selbst ist ~ 100 kb Standalone, die Sie in Ihrem Projekt Stammverzeichnis platzieren. Dies steht im Gegensatz zu machen oder Rechen und Freunden, wo das Build-System muss zuerst installiert werden. Sie haben müssen Python> = 2.3 obwohl installiert.
~$ ./waf configure && ./waf && ./waf install
Waf Äquivalent zu Makefiles ist die wscript Datei. Es ist ein Python-Skript waf liest und definiert mindestens drei Funktionen: set_options()
, configure(conf)
und build(bld)
. Sie können erraten, was jeder von ihnen der Fall ist.
Um kurbeln, empfehle ich in den Demos / CPP / * Dateien in der Source-Distribution suchen. Werfen Sie auch einen Blick auf die doc / waf.pdf Datei; es ist ein 12-seitiges Dokument, das Sie schnell zum Laufen bekommt.
Für einen Vergleich der Geschwindigkeit der verschiedenen C ++ Tools erstellen, können Sie einen Blick auf diese Benchmark haben: http://retropaganda.info/~bohan/devel/wonderbuild/benchmarks/ time.xml
Wir verwenden Jam für ein komplexes C ++ Projekt - ein Vorteil ist, dass es schön Cross-Plattform ist. Anstatt mir die Vorteile Auslauf aus, haben nur einen kurzen Blick auf diesen Link: http://www.perforce.com/jam/jam.html
Noel Llopis hat ein paar Artikel geschrieben Systeme vergleichen bauen. Teil 1 von "The Quest for Perfect Build-System" ist unter http: //gamesfromwithin.com/the-quest-for-the-perfect-build-system . Teil 2 folgt auf dem gleichen Gelände. Eine Wiederholungs von Scons wird berichtet, unter http://gamesfromwithin.com/?p=104 .
Schlussfolgerungen:. SCons ist zu langsam ... Jam ist der Gewinner
Cook ist ein weiteres Werkzeug, das verwendet werden kann machen, um zu ersetzen. Ich habe mit ihm mehr großen Unternehmen gesehen. So ist es Unternehmen bereit, obwohl die Website sieht eher veraltet.
Ich habe mit SCons auf einem großen c ++ Projekt (auf Linux und Windows), und es funktioniert wirklich gut.
scons all -j8
(die Objektdateien parallel kompiliert) ist sehr cool!
Ich benutze bakefile für meinen Build-Prozess, und ich wurde ein großer Fan!
Ich habe nie mehr ein Makefile selbst zu schreiben, geschweige denn schrecklich GNU Autotools-Skripte. Alles, was ich tun muß, ist eine XML
Datei zur Verfügung stellen, die die Build-Ziele beschreiben. Bakefile kann dies in ein Makefile umwandeln, die alle (Header-Datei) erhalten Abhängigkeiten rechts usw., wo verschiedene Makefile-Formate (Einfügen aus der Dokumentation die Liste) gewählt werden:
available formats are:
autoconf GNU autoconf Makefile.in files
borland Borland C/C++ makefiles
dmars Digital Mars makefiles
dmars_smake Digital Mars makefiles for SMAKE
gnu GNU toolchain makefiles (Unix)
mingw MinGW makefiles (mingw32-make)
msevc4prj MS eMbedded Visual C++ 4 project files
msvc MS Visual C++ nmake makefiles
msvc6prj MS Visual C++ 6.0 project files
msvs2003prj MS Visual Studio 2003 project files
msvs2005prj MS Visual Studio 2005 project files
symbian Symbian development files
watcom OpenWatcom makefiles
xcode2 Xcode 2.4 project files
Normalerweise verwende ich die autoconf Option, und es schreibt die lästigen GNU Autotools-Skripte für mich. Ich hatte das configure.ac
Skript anpassen, so dass configure auf jedem System eine bestimmte Bibliothek findet. Aber es war nicht so schlimm. Getting die autoconf Skripte auf diese Weise ist schön, weil ich sie alle von mir nicht zu schreiben, und wenn ich mein Projekt verteilen wird es aussehen, als ob ich sie geschrieben hatte, und die Benutzer können immer noch mein Projekt in der Gott- bauen gewichen, mit
./configure && make && make install