Autotools vs CMake pour la compilation Windows et Linux

je cherche le pour et le contre des Autotols et des cakes. Mais j'aimerais connaître l'opinion des gens qui ont utilisé un (ou les deux) de ces outils pour des projets.

j'ai utilisé des Autotools il y a très peu de temps et je sais que l'un des bons points est qu'il repose sur des scripts shell, il n'est donc pas nécessaire de l'Installer pour l'exécuter et utilise des scripts shell portables. Mais il semble que c'est trop orienté unix, et il ne serait pas possible d'exécuter le fichier de configuration sur Windows.

je dois maintenant choisir un outil de système de construction pour un projet open source qui devra être compilé pour au moins Linux & Windows. Il est écrit en C++, et utilise un front-end Qt GUI, le reste est "générique".

merci de votre aide.

34
demandé sur Julio Guerra 2011-04-30 01:51:31

2 réponses

je ne recommanderais pas autotools pour Windows. Utilisez CMake.

Pourquoi? Windows n'a pas de sh natif.exe, et l'émulation est lente. Il est également très facile de se tromper sur la configuration. Je ne dis pas que C'est impossible avec CMake, mais CMake fait sûrement des abstractions plus loin, donc tu t'inquiètes pour moins. La documentation de CMake peut être un peu difficile à lire, mais une fois qu'elle est mise en place, vous devriez être parfait pour toutes les chaînes d'outils jamais supportées par CMake. CMake intègre également les tests, l'emballage etc...

Autotools est lent sur Windows, ne fonctionne pas facilement avec MSVC, et a des bizarreries bizarres avec Windows (et d'autres os) qui sont difficiles à déboguer, et difficile à réparer. libtool craint aussi sur Windows, où il refuse souvent de construire une bibliothèque partagée, même si vous pensez qu'il devrait et pourrait. Les problèmes de déplacement de la chaîne d'outils sont également courants avec libtool, qui peut regarder les mauvais fichiers dans la chaîne d'outils d'un utilisateur. CMake est beaucoup plus facile à cet égard. Il suppose des choses normales au sujet de la cible. plate-forme et crée des instructions génériques et de bonne construction.

aussi, CMake a une sortie colorée :) et de beaux pourcentages de progression.

PS: j'ai juste un peu d'expérience avec CMake et autotools sur Windows en tant qu'utilisateur. CMake a tendance à travailler, les autotools ont tendance à vous arracher l'oreille quand vous ne regardez pas, et à vous sourire quand il échoue en raison d'une erreur étrange...

30
répondu rubenvb 2017-07-10 11:24:02

mise à jour le 19 juin 2017:

j'ai déjà utilisé des autotols pendant un temps considérable.

meson au travail et pour les projets personnels, respectivement.

Quelques conseils personnels:

  1. pour les grandes équipes, s'en tenir à CMake si vous voulez utiliser les générateurs pour VS et XCode. Si vous n'en avez pas besoin, je considérerais meson sérieusement.
  2. choisir meson sur autotools à moins que vous ayez besoin de quelque chose de vraiment ésotérique que autotools supporte et meson ne supporte pas. Sinon, IMHO, Meson est un bien meilleur choix que les autotools déjà, et vous serez en mesure de prendre en charge windows.

j'ai aussi essayé scons, waf et tup.

le système multi-plateforme le plus complet est CMake, mais la DSL de meson sera plus facile à utiliser pour les personnes habituées à python et d'autres. Meson est commencer à soutenir VS également (un générateur VS2015) et certains projets ont déjà un soutien expérimental pour it, par exemple gstreamer. Gstreamer est compilé dans windows ainsi qu'avec meson. En ce moment il y a VS2015 generator et VS2017 mais je n'ai pas essayé moi-même les générateurs dernièrement. Que du méson 0.37.1 avait besoin de quelques travaux, mais ils sont l'amélioration et la version actuelle est déjà 0.40.

Meson

Avantages:

  • la DSL n'entre pas le chemin à tous. En fait, il est très agréable et familier, basé en python.
  • Bien pensé cross compilation de soutien.
  • les objets sont tous fortement dactylographiés: vous ne pouvez pas faire facilement des erreurs de substitution de chaîne, car les objets sont des entités telles que 'depencency', 'include directory', etc.
  • il est très évident comment ajouter un module pour un de vos outils.
  • la compilation croisée semble plus simple à utiliser.
  • Vraiment bien pensée. Le concepteur et auteur principal de Meson sait il parle très bien lors de la conception d'un système de construction.
  • Très, très rapide, en particulier dans des versions.
  • la documentation est 10 fois meilleure que ce que vous pouvez trouver dans cmake. Allez visitez le site http://mesonbuild.com et vous trouverez le tutoriel, howtos et une bonne référence. Il n'est pas parfait, mais il est vraiment détectable.

contre:

  • pas aussi matures comme CMake, cependant, je considère qu'il est déjà tout à fait utilisable pour le C++.
  • il N'y a pas tellement de modules disponibles, cependant, gnome, qt et les autres sont déjà là.
  • générateurs de projet: semble VS générateur ne fonctionne pas aussi bien que maintenant. Les générateurs du projet CMake sont beaucoup plus matures.
  • possède une dépendance python3 + ninja.

Cmake

Avantages:

  • Génère des projets pour de nombreuses différentes IDEs. C'est un très fonctionnalité intéressante pour les équipes.
  • Joue bien avec les outils windows, contrairement aux autotools.
  • Matures, près de standard de facto.
  • Microsoft travaille sur L'intégration de CMake pour Visual Studio.

contre:

  • il ne suit aucune norme ou ligne directrice bien connue.
  • Pas de désinstaller cible.
  • la DSL est bizarre, quand vous commencez à faire des comparaisons et ainsi, et les cordes vs liste chose ou escape chars, vous ferez beaucoup d'erreurs, je suis assez sûr.
  • la compilation croisée craint.

Autotools

Avantages:

  • le système le plus puissant pour la compilation croisée, IMHO.
  • Les scripts générés n'ont besoin de rien d'autre que de faire, une coquille et, si vous en avez besoin pour construire, un compilateur.
  • La ligne de commande est vraiment sympa et cohérent.
  • un standard dans le monde unix, beaucoup de docs.
  • ligne de commande vraiment puissante: modification des répertoires d'installation, désinstallation, renommer les binaires...
  • si vous ciblez unix, empaqueter les sources avec cet outil est vraiment pratique.

contre:

  • il ne va pas bien jouer avec les outils microsoft. Un véritable spectacle.
  • La courbe d'apprentissage est... bien... Mais en fait, je peux dire que CMake n'était pas facile non plus.

au sujet de la courbe d'apprentissage, il y a deux très bonnes sources d'apprentissage:

  • le site web ici
  • Le livre ici

la première source vous permettra de fonctionner plus rapidement. Le livre est une discussion plus approfondie.

de Scons, waf et tup, Scons et tup sont plus comme make. Waf ressemble plus à CMake et aux autotools. J'ai essayé waf au lieu de cmake à premier. Je pense qu'il est surenginé dans le sens où il a une API complète OOP. Les scripts ne semblaient pas courTs du tout et c'était vraiment déroutant pour moi les trucs de répertoire de travail et les choses connexes. À la fin, j'ai trouvé que les autotools et les CMake sont un meilleur choix. Mon préféré de ces 3 systèmes de construction est tup.

Tup

Pros

  • Vraiment correct.
  • Incroyablement rapide. Tu devrais essayer de croire il.
  • le langage de script repose sur une idée très simple qui peut être comprise en 10 minutes.

Cons

  • il n'a pas de cadre de configuration complet.
  • je ne pouvais pas trouver la façon de faire les objectifs, tels que doc, depuis ils génèrent des fichiers que je ne connais pas et ils doivent être listés dans la sortie avant d'être générés, ou du moins, c'est ma conclusion pour le moment. Il s'agit là d'une limitation vraiment gênante, si elle l'est, puisque Je ne suis pas sûr.

dans l'Ensemble, les seules choses que je considère maintenant pour les nouveaux projets sont Cmake et Meson. Quand j'en aurai l'occasion, j'essaierai aussi tup, mais il manque le cadre de configuration, ce qui veut dire qu'il rend les choses plus complexes quand on a besoin de tout ça. D'autre part, il est vraiment très rapide.

65
répondu Germán Diago 2017-11-15 04:22:11