46 votes

Quel est actuellement le meilleur système de construction

Il y a quelques années, j'ai cherché à utiliser un système de construction qui n'est pas Make et des outils comme CMake et SCons semblaient assez primitifs. J'aimerais savoir si la situation s'est améliorée. Donc, selon les critères suivants, quel est actuellement le meilleur outil de construction :

  • agnostique en termes de plate-forme : devrait fonctionner sur Windows, linux, mac
  • agnostique en matière de langage : devrait avoir un support intégré pour les choses courantes comme la construction de C/C++ et d'autres langages statiques. Je suppose qu'il n'a pas besoin de supporter la suite complète d'autotools.
  • extensible : Je dois pouvoir écrire des règles pour générer des fichiers, par exemple à partir de RestructuredText, de Latex, de formats personnalisés, etc. Je ne me soucie pas vraiment du langage dans lequel je dois écrire les règles, mais je préférerais un vrai langage plutôt qu'un DSL.
  • Je préférerais éviter d'écrire tout XML à la main, ce qui me semble par exemple ant exige.
  • Disponible gratuitement (de préférence open source)

Le terme "meilleur" est légèrement subjectif, mais je pense que les réponses peuvent être évaluées objectivement selon les critères ci-dessus.

0 votes

Je suis confus. Vous dites "il n'a pas besoin de supporter la suite complète d'autotools". Est-ce que cela signifie que votre question devrait être reformulée : "Quel est le meilleur système de construction après autoconf/automake ?"

0 votes

@William Pursell : Non. Je laisse explicitement de côté l'obligation de prendre en charge autoconf et automake, car ils sont si étroitement liés à Makefiles.

1 votes

Je ne vois rien de mal à la question initiale ou à la discussion qui en résulte. Étant donné que cette question est maintenant le premier résultat du moteur de recherche pour "best build system", cette question devrait être rouverte. Je pourrais comprendre la fermeture de cette question si la discussion était en fait une question d'opinion, ou si elle avait attiré du spam, mais ce n'est pas le cas.

25voto

Kornel Kisielewicz Points 26556

Je mettrais définitivement mon vote pour Préparez . Bien qu'il ne soit pas aussi puissant que ses grands frères, son principal avantage est sa simplicité absurde et sa facilité d'utilisation. Il fait de l'écriture de code multi-compilateur et multiplateforme un jeu d'enfant, et génère nativement des solutions Visual Studio, des projets XCode, des Makefiles, et autres, sans aucun travail supplémentaire.

0 votes

Il a l'air vraiment bien. Cela dit, il n'a pas l'air de supporter grand-chose "hors de la boîte" ?

2 votes

Et Premake intègre un interpréteur Lua, qui est un langage de script plus puissant que celui de CMake, à mon avis.

1 votes

Et il n'est pas nécessaire de télécharger un interpréteur Python pour Windows comme Scons ou Waf.

15voto

Ben Karel Points 2731

Donc, en se basant uniquement sur les critères énoncés dans la question, le système de construction qui semble le mieux convenir est probablement le suivant waf - pur Python, fournit un support pour C++ et d'autres langages, général, puissant, pas un DSL.

Cependant, d'après mon expérience personnelle, je préfère CMake pour les projets C++. (J'ai essayé CMake, SCons, et waf, et je les ai aimés dans cet ordre). CMake est une solution générale, mais il a un support intégré pour C++ qui le rend plus agréable qu'une solution plus générique lorsque vous faites réellement du C++.

Le modèle de construction de CMake pour C++ est plus déclaratif et moins impératif, et donc, pour moi, plus facile à utiliser. La syntaxe du langage de CMake n'est pas géniale, mais une construction déclarative avec une syntaxe étrange bat une construction impérative en Python. Des trois, CMake semble aussi avoir le meilleur support pour les choses "avancées" comme les en-têtes précompilés. La mise en place d'en-têtes précompilés a réduit mon temps de reconstruction d'environ 70%.

Les autres avantages de CMake sont une documentation décente et une communauté importante. De nombreuses bibliothèques open source ont des fichiers de construction CMake, soit dans l'arbre, soit fournis par la communauté CMake. Il y a des projets majeurs qui utilisent déjà CMake (OGRE vient à l'esprit), et d'autres projets majeurs, comme Boost et LLVM, sont en train de passer à CMake.

Une partie du problème que j'ai trouvé en expérimentant avec les systèmes de construction est que j'essayais de construire un plugin NPAPI sur OS X, et il s'avère que très peu de systèmes de construction sont configurés pour donner à XCode la combinaison exacte de drapeaux nécessaires pour le faire. CMake, reconnaissant que XCode est une cible complexe et mouvante, fournit un crochet pour définir manuellement les commandes dans les projets XCode générés (et Visual Studio, je pense). C'est très intelligent en ce qui me concerne.

Le fait que vous construisiez une bibliothèque ou une application peut également déterminer le meilleur système de construction. Boost utilise toujours un système basé sur les confitures, en partie parce qu'il fournit le support le plus complet pour gérer les types de construction plus complexes que "Debug" et "Release". La plupart des bibliothèques Boost ont cinq ou six versions différentes, en particulier sous Windows, anticipant les personnes ayant besoin de bibliothèques compatibles qui se lient à différentes versions du CRT.

Je n'ai pas eu de problèmes avec CMake sous Windows, mais bien sûr votre kilométrage peut varier. Il y a une interface graphique décente pour configurer les dépendances de construction, bien qu'elle soit difficile à utiliser pour les reconstructions. Heureusement, il y a aussi un client en ligne de commande. Ce que j'ai décidé jusqu'à présent est d'avoir un Makefile enveloppant fin qui invoque CMake à partir d'un objdir ; CMake génère alors des Makefiles dans l'objdir, et le Makefile original les utilise pour faire la compilation. Cela permet de s'assurer que les gens n'invoquent pas accidentellement CMake depuis le répertoire source et n'encombrent pas leur dépôt. Combiné avec MinGW, ce "sandwich CMake" fournit une expérience de construction multiplateforme remarquablement cohérente !

0 votes

Je dois appuyer ce point. MacOSX et CMake n'est tout simplement pas une solution si vous avez la qualité en tête (en utilisant des outils comme le support d'internationalisation). Je vais migrer notre système de construction un jour, il fonctionne actuellement de manière acceptable pour une application plus simple uniquement en anglais.

0 votes

Le WAF est un code abyssal de faible qualité. Impossible à étendre ou même à lire (je me demandais s'il n'était pas obscurci à dessein, mais quoi qu'il en soit, il semble que ce soit la seule version existante). Impossible de déboguer ou de prévoir ce qu'il va faire. C'est une blague de programme en ce qui concerne la conception du logiciel, un codage Python carrément boiteux mélangé à une génération grotesque de code d'exécution là où c'était absolument inutile. Et... un livre a été écrit à son sujet. facepalm .

14voto

Andrew Wagner Points 1958

Bien sûr, cela dépend de vos priorités. Si vous recherchez avant tout la facilité d'utilisation, il existe au moins deux nouveaux systèmes de construction qui se connectent au système de fichiers pour suivre automatiquement les dépendances sans tenir compte du langage.

L'un d'eux est tup :

http://gittup.org/tup/

et l'autre est fabriquée :

http://code.google.com/p/fabricate/

Celui qui semble être le plus performant, portable et mature (et celui que j'ai réellement utilisé) est tup. Le gars qui l'a écrit maintient même une distro Linux jouet où tout est un submodule git, et tout (y compris le noyau) est construit avec tup. D'après ce que j'ai lu sur le système de construction du noyau, c'est un bel accomplissement.

De plus, Tup nettoie les vieilles cibles et autres déchets, et peut maintenir automatiquement vos fichiers .gitignore. Le résultat est qu'il devient trivial d'expérimenter avec la disposition et les noms de vos cibles, et vous pouvez en toute confiance sauter entre les révisions git sans tout reconstruire. Il est écrit en C.

Si vous connaissez haskell et que vous recherchez quelque chose pour des cas d'utilisation très avancés, consultez shake :

http://community.haskell.org/~ndm/shake/

Mise à jour : Je ne l'ai pas essayé, mais ce nouvel outil "buildsome" s'accroche également au système de fichiers, et a été inspiré par tup, donc est pertinent :

https://github.com/ElastiLotem/buildsome

0 votes

D'après ce que j'ai compris, redo ne s'accroche pas du tout au système de fichiers, seuls tup et fabricate le font.

6voto

Benoit Points 39210

CMake

CMake est un système extensible, open-source qui gère le processus de construction dans un système d'exploitation et d'une indépendant du compilateur.

0 votes

J'ai cru comprendre qu'il y avait des problèmes avec Windows il y a quelques années. Sont-ils réglés ?

0 votes

Je n'ai commencé à l'utiliser que récemment et je n'ai pas eu de problème. Étant donné que MySQL l'utilise pour ses versions Windows, je ne vois pas de problèmes majeurs.

2 votes

CMake est bien meilleur qu'autotools mais il utilise toujours son propre DSL et je vois cela comme un obstacle : Vous devez investir dans l'apprentissage d'un nouveau langage. Pour cette raison, j'opterais pour des solutions comme Waf (Python) ou Rake (Ruby).

1voto

AutomatedTester Points 14713

Le projet Selenium est déplacé vers Râteau Ce n'est pas parce qu'il est le meilleur, mais parce qu'il gère plusieurs langues un peu mieux que tous les autres outils de construction et qu'il est multiplateforme (développé en Ruby).

Tous les outils de construction ont leurs problèmes et les gens apprennent à vivre avec. Un outil qui tourne sur la JVM a tendance à être très bon pour la construction d'applications. Fourmi , Maven (je sais que c'est hideux), Ivy , Râteau

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X