web-dev-qa-db-fra.com

AutoTools vs Cmake pour la compilation Windows et Linux

Je cherchais des avantages et des inconvénients d'autotools et de cmake. Mais j'aimerais connaître des opinions de personnes ayant utilisé un (ou les deux) de ces outils pour des projets.

J'ai utilisé des autotools très essentiellement il y a un an et je sais que l'un des bons points est qu'il s'appuie sur des scripts Shell, il n'a donc pas besoin d'être installé pour être exécuté et utilise des scripts de shell portables. Mais il semble que c'est trop unix orienté, et il ne serait pas possible d'exécuter le fichier de configuration sous Windows.

Je dois maintenant choisir un outil de système de construction pour n projet open source qui devra être compilé au moins Linux & Windows. Il est écrit en C++ et utilise un gui-front d'interface graphique QT, le reste de celui-ci est "générique".

Merci pour ton aide.

37
Julio Guerra

Je ne recommanderais pas AutoTools pour Windows. Utiliser cmake.

Pourquoi? Windows n'a pas de native sh.exe, et l'émulation est lente. Il est également très facile d'obtenir le contrat de configuration. Je ne dis pas que c'est impossible en cmake, mais cmake résoudra sûrement plus loin, alors vous vous inquiétez de moins. La documentation CLAKE peut être un peu difficile à lire, mais une fois que cela est mis en place, vous devriez être bien pour toutes les cuillères à 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 offre des bizarreries bizarres avec Windows (et autres OSES) difficiles à déboguer et difficiles à réparer. LibTool cuit également les fenêtres, où il refuse souvent de créer une bibliothèque partagée, même si vous pensez que cela devrait et pourrait. Les problèmes de déménagement de la boîte à outils sont également répandus avec libtoure, ce qui peut examiner les mauvais fichiers dans une boîte à outils d'un utilisateur. Cmake est beaucoup plus facile à cet égard. Il assume des choses normales sur la plate-forme cible et crée des instructions génériques et de bonne construction.

En outre, Cmake a une sortie colorée :) et de beaux pourcentages de progrès.

PS: J'ai juste une certaine expérience avec Clake et AutoTools sous Windows en tant qu'utilisateur. Cmake a tendance à travailler, AutoTools a tendance à me mordre l'oreille lorsque vous ne cherchez pas et vous souriez quand il échoue à cause d'une erreur étrange ...

32
rubenvb

Updated 16 janvier 2019: conseils raffinés comme des outils évoluent.

J'ai utilisé des autotools avant pour une durée considérable.

Actuellement, je fais une utilisation intensive de Meson et cmake uniquement lorsque j'en ai besoin.

Quelques conseils personnels:

  1. pour les grandes équipes, collez-vous à CMAKE si vous souhaitez utiliser les générateurs pour Xcode. Si vous n'en avez pas besoin, j'utiliserais Meson directement. Meson, à partir de la version 0.49, prend également en charge la recherche de fichiers de configuration CUPAKE (bien que je n'ai pas encore testé à quel point cette fonction). En outre, Visual Studio semble être suffisamment bien soutenu à ce moment-là, cependant, encore une fois, je ne m'essayais pas. L'avantage de CMAKE est qu'il a une intégration de studio visuelle.

  2. Drop AutoTools. Meson couvre bien tout. Leur modèle de compilation croisée est incroyablement compréhensible. En CMAKE, la dernière fois que j'ai vérifié, tout était assez difficile.

J'ai également essayé Scons , WAF , et TUP .

Le système de plate-forme multiplate-plate-forme la plus complète est CMake, mais le DSL de Meson sera plus facile à utiliser pour les personnes utilisées pour python et autres. Meson commence à Support VS également (un générateur VS2015) et certains projets ont déjà un support expérimental pour celui-ci, par exemple Gstreamer. Gstreamer est compilé sous Windows avec Meson. Il y a maintenant un générateur VS2015 et vs2017 mais je ne m'essayais pas les générateurs ces derniers temps. À partir de Meson 0.37.1 nécessitait quelques travaux, mais ils les améliorent et la version actuelle est déjà de 0,40.

Meson

Avantages:

  • La DSL ne comprend pas du tout. En fait, c'est très gentil et familier, basé à Python.
  • Support de compilation croisée bien pensé.
  • Les objets sont tous fortement dactylographiés: vous ne pouvez pas facilement faire des erreurs de substitution à chaîne, car les objets sont des entités telles que "DEPENCENCE", "Inclure le répertoire", etc.
  • C'est très évideur comment ajouter un module pour l'un de vos outils.
  • La compilation croisée semble plus simple à utiliser.
  • Vraiment bien pensé. Le designer et l'écrivain principal de Meson sait ce qu'il parle très bien lors de la conception d'un système de construction.
  • Très très rapide, surtout dans les constructions incrémentielles.
  • La documentation est 10 fois meilleure que ce que vous pouvez trouver dans CMAKE. GO VISITE http://mesonbuild.com et vous trouverez du didacticiel, des howtos et une bonne référence. Ce n'est pas parfait mais c'est vraiment découvertable.

Les inconvénients:

  • Pas aussi mature que cmake, cependant, je le considère déjà complètement utilisable pour C++.
  • Pas tant de modules disponibles, cependant, gnome, qt et les ordinaires sont déjà là.
  • Générateurs de projet: On dirait que VS Generator ne fonctionne pas aussi bien qu'en maintenant. Les générateurs de projets CMAKE sont beaucoup plus matures.
  • A une dépendance python3 + ninja.

cmake

Avantages:

  • Génère des projets pour de nombreux idées différents. Ceci est un très Belle fonctionnalité pour les équipes.
  • Joue bien avec les outils Windows, contrairement à AutoTools.
  • Standard mature, presque de facto.
  • Microsoft travaille sur l'intégration de Cumake pour Visual Studio.

Les inconvénients:

  • Il ne suit pas de norme ou de directives bien connues.
  • Pas de cible de désinstallation.
  • Le DSL est bizarre, lorsque vous commencez à faire des comparaisons, etc., ainsi que les chaînes de la liste ou des caractères d'évacuation, vous ferez de nombreuses erreurs, je suis à peu près sûr.
  • La compilation croisée est nulle.

AutoTools

Avantages:

  • 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, d'une coquille et, si vous en avez besoin pour construire, un compilateur.
  • La ligne de commande est vraiment sympa et cohérente.
  • Une norme dans Unix World, beaucoup de documents.
  • Ligne de commande vraiment puissante: changement de répertoires d'installation, désinstallez, renommer des fichiers binaires ...
  • Si vous cible UNIX, les sources d'emballage avec cet outil sont vraiment pratiques.

Les inconvénients:

  • Il ne jouera pas bien avec Microsoft Tools. Un vrai showstopper.
  • La courbe d'apprentissage est ... bien ... mais en fait, je peux dire que Clake n'était pas si facile non plus.
  • L'utilisation de la marque récursive est omniprésente dans des projets hérités. Automake prend en charge les constructions non récursives , mais ce n'est pas une approche très largement utilisée.

À propos de la courbe d'apprentissage, il y a deux très bonnes sources à apprendre de:

La première source vous mènera et courbera plus rapidement. Le livre est une discussion plus approfondie.

De Scuons, WAF et TUP, SCONS et TUP sont plus comme faire. WAF est plus comme CUPAKE et les AutoTools. J'ai essayé la machine au lieu de la cmake au début. Je pense que c'est surgiré dans le sens où il a un plein OOP API. Les scripts n'ont pas l'air court du tout et c'était vraiment déroutant pour moi les trucs de répertoire de travail et les choses associées. À La fin, j'ai trouvé que les autotools et la cmake sont un meilleur choix. Mon préféré de ces 3 systèmes de construction est TUP.

TUP

Avantages

  • Vraiment correct.
  • Insansement rapide . Vous devriez l'essayer de le croire.
  • Le langage de script repose sur une idée très facile qui peut être comprise en 10 minutes.

Les inconvénients

  • Il n'a pas de cadre de configuration complet.
  • Je n'ai pas pu trouver le moyen de faire des cibles telles que doc, car ils génèrent des fichiers que je ne connais pas et ils doivent être énumérés dans la sortie avant d'être générés, ou du moins, c'est ma conclusion pour l'instant . C'était une limitation vraiment gênante, si c'est le cas, car je ne suis pas sûr.

Dans l'ensemble, les seules choses que je considère en ce moment pour de nouveaux projets sont cmake et Meson. Quand j'ai une chance, je vais essayer de TUP aussi, mais il manque le cadre de configuration, ce qui signifie que cela rend les choses plus complexes lorsque vous avez besoin de tout ce genre de choses. D'autre part, c'est vraiment rapide.

75
Germán Diago