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 ne soit pas Make , et des outils comme CMake et SCons semblaient plutôt primitifs. J’aimerais savoir si la situation s’est améliorée. Donc, sous les critères suivants, quel est actuellement le meilleur outil de compilation:

  • agnostique de la plateforme: devrait fonctionner sur Windows, Linux, Mac
  • agnostique du 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 prendre en charge la suite complète d’autotools.
  • extensible: je dois être capable d’écrire des règles pour générer des fichiers, comme restructuredText, latex, formats personnalisés, etc. Je ne me soucie pas vraiment de la langue dans laquelle j’écris les règles, mais je préférerais un vrai langage plutôt qu’un DSL .
  • Je préférerais éviter d’écrire un fichier XML à la main, ce qui, par exemple, me semble ant .
  • Librement disponible (de préférence open source)

Le terme «meilleur» est légèrement subjectif, mais je pense que les critères ci-dessus permettent d’évaluer objectivement les réponses.

J’avais définitivement voté pour le premake . Bien qu’il ne soit pas aussi puissant que ses frères aînés, son principal avantage est la simplicité absurde et la facilité d’utilisation. Facilite l’écriture de code multi-compilateur et multiplateforme, et génère de manière native des solutions Visual Studio, des projets XCode, des Makefiles et autres, sans nécessiter de travail supplémentaire.

Bien sûr, cela dépend de vos priorités. Si vous recherchez principalement la facilité d’utilisation, il existe au moins deux nouveaux systèmes de génération qui se connectent au système de fichiers pour suivre automatiquement les dépendances de manière indépendante du langage.

L’un est tup:

http://gittup.org/tup/

et l’autre est fabriqué:

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 dissortingbution Linux de jouets où tout est un sous-module git, et tout (y compris le kernel) est construit avec tup. D’après ce que j’ai lu sur le système de compilation du kernel, c’est tout un exploit.

En outre, Tup nettoie les anciennes cibles et les autres fichiers endommagés, et peut automatiquement gérer vos fichiers .gitignore. Le résultat est qu’il devient sortingvial d’expérimenter la mise en page et les noms de vos cibles, et vous pouvez sauter en toute confiance entre les révisions de git sans tout reconstruire. C’est écrit en C.

Si vous connaissez le haskell et que vous cherchez 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” est également connecté au système de fichiers et a été inspiré par tup, ce qui est pertinent:

https://github.com/ElastiLotem/buildsome

Donc, à en juger purement par les critères énoncés dans la question, le système de construction qui semble le mieux adapté est probablement Waf – pure Python, qui prend en charge le langage C ++ et d’autres langages, général, puissant, pas un DSL.

Cependant, de mon expérience personnelle, je préfère les projets CMake pour C ++. (J’ai essayé CMake, SCons et waf, et je les ai aimés à peu près dans cet ordre). CMake est une solution générale, mais elle prend en charge C ++, ce qui la rend plus agréable qu’une solution plus générique lorsque vous utilisez 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 CMake n’est pas géniale, mais une version déclarative avec une syntaxe impaire bat une version impérative de Python. Parmi les trois, CMake semble également avoir le meilleur support pour les choses “avancées” comme les en-têtes précompilés. La configuration d’en-têtes précompilés a réduit mon temps de reconstruction d’environ 70%.

D’autres avantages pour CMake incluent une documentation décente et une communauté importante. De nombreuses bibliothèques open source ont des fichiers de génération CMake intégrés dans l’arborescence ou fournis par la communauté CMake. Il existe d’importants projets qui utilisent déjà CMake (OGRE en est à l’esprit), et d’autres projets majeurs, tels que Boost et LLVM, sont en train de passer à CMake.

Une partie du problème que j’ai découvert lors de l’expérimentation de systèmes de construction est que j’essayais de créer un plug-in NPAPI sur OS X, et il s’avère que très peu de systèmes de compilation sont configurés pour donner à XCode la combinaison exacte requirejse. CMake, reconnaissant que XCode est une cible complexe et mouvante, fournit un crochet pour la configuration manuelle des commandes dans les projets XCode générés (et je pense, Visual Studio). C’est très intelligent en ce qui me concerne.

Que vous construisiez une bibliothèque ou une application peut également déterminer quel système de construction est le meilleur. Boost utilise toujours un système basé sur les bourrages, 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 de 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 rencontré aucun problème avec CMake sous Windows, mais votre kilométrage peut varier. Il existe une interface graphique décente pour configurer les dépendances de construction, bien que cela soit maladroit à utiliser pour les reconstructions. Heureusement, il y a aussi un client en ligne de commande. Ce que j’ai décidé jusqu’ici est d’avoir un makefile de wrapper mince qui appelle CMake à partir d’un objdir; CMake génère alors des Makefiles dans le fichier objdir, et le Makefile original les utilise pour faire la construction. Cela garantit que les utilisateurs n’invoquent pas accidentellement CMake depuis le répertoire source et encombrent leur référentiel. Combiné avec MinGW, ce “sandwich” CMake offre une expérience de construction multiplateforme remarquablement cohérente!

CMake

CMake est un système open source extensible qui gère le processus de génération dans un système d’exploitation et de manière indépendante du compilateur.

Gradle semble correspondre à tous les critères mentionnés ci-dessus.

C’est un système de construction qui a pris le meilleur de Maven et de Ant combinés. Pour moi, c’est le meilleur.

Le projet Selenium passe à Rake , non pas parce que c’est le meilleur, mais parce qu’il gère un peu mieux les langages que tous les autres outils de construction et qu’il est multi-plateforme (développé en Ruby).

Tous les outils de construction ont leurs problèmes et les gens apprennent à vivre avec eux. Quelque chose qui tourne sur la JVM a tendance à être vraiment bon pour créer des applications, donc Ant , Maven (je connais son horrible), Ivy , Rake

Final Builder est bien connu dans le monde Windows

la construction en douceur correspond à la plupart de vos besoins.

  • agnostique de la plate-forme: oui, c’est écrit en Java
  • agnostique du langage: il ne supporte pas encore c / c ++ t, seulement java mais il est extensible via des plugins écrits en java, donc append plus de support aux compilateurs n’est pas un problème
  • extensible: oui, vous pouvez implémenter une fonction fluide via le plugin java, vous pouvez également créer une fonction fluide en la définissant comme une expression constituée d’autres fonctions lisses.
  • Je préférerais éviter d’écrire du code XML: vous ne verrez pas une seule ligne dans une version fluide.
  • Librement disponible: oui, licence Apache 2

divulgation: je suis l’auteur de la construction en douceur.