Qualsiasi buona costruzione di strumenti per un progetto C++, che può essere sostituita da fare?
-
09-06-2019 - |
Domanda
mi chiedo se c'è qualche bello e pulito strumento per sostituire la GNU Autotools o Fare per costruire un grande progetto di C++, che sono una cosa complicata da usare.
È semplice per generare tutti i file che de Autotools richiede se il progetto è piccolo, ma se il codice sorgente è diviso in molte directory, con più librerie di terze parti e di molte dipendenze, si cade in "Autotools Inferno"..
grazie per eventuali consigli
Soluzione
Il Google Motore JavaScript V8 è scritto in C++ ed utilizza SCons, quindi credo che un voto per questo.
Altri suggerimenti
Guarda waf.
Penso che si può considerare come un completo ricambio per marca e autotools.Esso è basato su python.Una cosa che mi piace di waf è che il waf script è ~100kb standalone che è posto nella vostra directory principale del progetto.Questo è in contrasto o rastrello e amici, dove il sistema di generazione deve essere installato per primo.Si deve avere python >=2.3 installato però.
~$ ./waf configure && ./waf && ./waf install
Waf è equivalente a Makefile è wscript file.È uno script python waf legge, e definisce almeno 3 funzioni: set_options()
, configure(conf)
e build(bld)
.Si può indovinare che cosa ciascuno di loro fa.
Per jumpstart, vi consiglio di guardare nel demo/cpp/* file sorgente e di distribuzione.Anche dare un'occhiata al doc/waf.pdf file;si tratta di un 12-pagina del documento che sarà presto ottenere installato e funzionante.
Per un confronto tra le velocità dei vari C++ costruire strumenti, si può avere uno sguardo a questo benchmark:http://retropaganda.info/~bohan/devel/wonderbuild/benchmarks/time.xml
Usiamo Jam per un complesso progetto di C++ - un vantaggio è che è ben cross-platform.Piuttosto che mi becco fuori i benefici, basta dare una rapida occhiata a questo link:http://www.perforce.com/jam/jam.html
Noel Llopis ha scritto un paio di articoli a confronto sistemi di compilazione.Parte 1 di "alla Ricerca Del Perfetto Sistema di generazione", è http://gamesfromwithin.com/the-quest-for-the-perfect-build-system.Parte 2 segue sul sito stesso.Una riprova di Scons è riferito a http://gamesfromwithin.com/?p=104.
Conclusioni:SCons è troppo lento ...Jam è il vincitore.
Cucinare è un altro strumento che può essere utilizzato per sostituire il fare.Ho visto diverse grandi aziende che lo utilizzano.Quindi, è pronto per le aziende anche se il sito sembra piuttosto datato.
Ho con SCons su un grande progetto di c++ (sia su Linux che su Windows), e funziona davvero bene.
scons all -j8
(che riunisce i file oggetto in parallelo) è molto cool!
Io uso bakefile per il mio processo di generazione e sono diventato un grande fan!
Non ho mai scrivere un Makefile più me stesso, figuriamoci orribile GNU autotools script.Tutto quello che devo fare è fornire un' XML
file che descrive la generazione di obiettivi.Bakefile può convertire questo in un Makefile che ottiene tutti i file di intestazione) dipendenze destra ecc, dove diversi Makefile formati possono essere scelti (incollando l'elenco da documentazione):
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
Io di solito uso il autoconf opzione, e scrive il fastidioso GNU autotools script per me.Ho dovuto adattare il configure.ac
script, in modo che configurare trova una determinata libreria su qualsiasi sistema.Ma non era troppo male.Ottenere il autoconf script in questo modo è bello, perché io non li scrivo tutti io, e quando ho distribuire il mio progetto sarà come se avessi scritto di loro, e gli utenti possono ancora costruire il mio progetto che dio ci ha dato modo, con
./configure && make && make install