2008-09-10 4 views
22

Je me demande s'il existe un outil sympa et pratique pour remplacer GNU Autotools ou Make pour construire un très grand projet C++, ce qui est vraiment compliqué à utiliser.Tout bon outil de construction pour un projet C++, qui peut remplacer make?

Il est facile de générer tous les fichiers dont de Autotools a besoin si le projet est petit, mais si le code source est divisé en plusieurs répertoires, avec plusieurs bibliothèques tierces et de nombreuses dépendances, vous tombez dans le "Autotools Hell" ..

merci pour toutes les recommandations

Répondre

18

Le Google V8 JavaScript Engine est écrit en C++ et utilise SCons, donc je suppose que c'est une voix pour cela.

+2

Nous avons constaté que SCons est inutilement lent pour les grandes solutions Visual Studio. Cela fonctionne très bien sur les systèmes UNIX-ish. –

+0

@Kristopher: Pouvez-vous élaborer? Je n'ai pas trouvé que c'était le cas dans mon expérience. Où générez-vous des fichiers scons à partir des fichiers devstudio? – grieve

+2

Je seconde ceci: SCons est très très lent quand il arrive à de plus grandes constructions. – jkp

18

CMake? (génère des makefiles, donc techniquement pas un remplacement en tant que tel).

J'ai également vu "SCons" apparaître récemment dans quelques endroits. Je n'ai rien créé avec ça moi-même.

+0

Il ne remplace pas faire, mais CMake ne remplace Autotools très bien – jturcotte

2

Cook est un autre outil qui peut être utilisé pour remplacer la marque. J'ai vu plusieurs grandes entreprises l'utiliser. Donc, il est prêt pour l'entreprise, même si le site semble plutôt daté.

http://miller.emu.id.au/pmiller/software/cook/

+0

j'utiliser Cook, tout le temps pour mes petits projets personnels. Ce que j'aime à ce sujet, c'est que je peux faire une liste de noms de fichiers a.o, b.o, c.o, à partir d'une liste existante comme a.c, b.c, c.c. Même faire des choses amusantes comme de a1.c, b1.c, c1.c générer a2.c, b2.c, etc. Makefiles ne semblent pas être en mesure de le faire. Inconvénient principal: Cook a son propre langage, donc vous ne pouvez pas tirer parti des compétences existantes en Python, Ruby etc – DarenW

6

Nous utilisons Jam pour un projet C++ complexe - un avantage est qu'il est bien multi-plateforme. Plutôt que de me jeter les avantages, juste jeter un coup d'oeil à ce lien: http://www.perforce.com/jam/jam.html

+0

Nous avons déménagé de la confiture à partir de makefiles il y a six ou sept ans. Il a fallu un peu de temps pour faire avancer les choses, mais une fois que le travail initial a été fait, il a été sans interruption depuis. La mise en place de nouveaux projets est presque triviale. –

+0

^déplacé confiture^déplacé à la confiture –

15

Regardez waf.

Je pense que vous pouvez le considérer comme un remplacement complet pour make et autotools. Il est basé sur python. Une chose que j'aime à propos de waf est que le script waf lui-même est ~ 100kb standalone que vous placez dans le répertoire racine de votre projet. Ceci est contraire à faire ou râteau et amis, où le système de construction doit être installé en premier. Vous devez avoir installé python> = 2.3.

~$ ./waf configure && ./waf && ./waf install 

L'équivalent de Waf pour Makefiles est le fichier wscript. Il s'agit d'un script python waf lit, et il définit au moins 3 fonctions: set_options(), configure(conf) et build(bld). Vous pouvez deviner ce que chacun d'eux fait. Pour démarrer, je recommande de regarder dans les fichiers demos/cpp/* de la distribution source. Regardez aussi le fichier doc/waf.pdf; C'est un document de 12 pages qui vous permettra d'être rapidement opérationnel.

+0

Scons fournit également une version "sans installation" ... pesant à 5,5 Ko ... – paxos1977

+2

5,5 Ko? Essayez 2.1 * MB * !! – richq

+2

SCons est également chien-lent. Je l'utilise depuis un an ou plus maintenant et je veux passer à Waf ASAP. – jkp

5

Noel Llopis a écrit quelques articles comparant les systèmes de construction. La partie 1 de "La quête du système de construction parfait" est au http://gamesfromwithin.com/the-quest-for-the-perfect-build-system. La deuxième partie suit sur le même site. Une nouvelle tentative de Scons est signalée au http://gamesfromwithin.com/?p=104. Conclusions: SCons est trop lent ... Jam est le gagnant.

+1

Cet article date de 2005, donc c'est assez daté. – JesperE

+0

True. Il y a le test plus récent de SCons, qui date de la fin de l'année dernière. Juste mis à jour le lien brisé. –

+0

Le premier lien semble être mort. – shuttle87

2

J'utilisant SCons sur un grand projet C++ (sur Linux et Windows), et fonctionne vraiment bien.

scons all -j8 (qui compile les fichiers objets en parallèle) est très cool!

1

J'utilise bakefile pour mon processus de construction et je suis devenu un grand fan!

Je n'aurai plus jamais à écrire un fichier Makefile, encore moins d'horribles scripts autotools GNU. Tout ce que j'ai à faire est de fournir un fichier XML qui décrit les cibles de construction. Bakefile peut convertir en un Makefile qui obtient tous les (fichier d'en-tête) dépendances droite etc, où les différents formats de Makefile peuvent être choisis (coller la liste de la documentation):

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 

J'utilise habituellement le autoconf options , et il écrit les scripts GNU autotools ennuyeux pour moi. J'ai dû adapter le script configure.ac, afin que configure trouve une certaine bibliothèque sur n'importe quel système. Mais ce n'était pas trop mal. Obtenir les scripts autoconf de cette façon est bien, car je n'ai pas besoin de les écrire tous seuls, et quand je distribuerai mon projet, il semblera que je les ai écrits, et les utilisateurs peuvent encore construire mon projet dans le dieu ... cédé la place, avec

./configure && make && make install 
+0

On dirait que ce projet n'est plus maintenu activement? – sivabudh

Questions connexes