Quelles sont les différences entre Autotools, Cmake et Scons?
Quelles sont les différences entre Autotools, Cmake et Scons?
Réponses:
En vérité, la seule véritable «grâce salvatrice» d'Autotools est que c'est ce que tous les projets GNU utilisent largement.
Problèmes avec les outils automatiques:
Cela fonctionne ... la plupart du temps ... c'est tout ce que vous pouvez dire sur Autotools. C'est un système qui résout plusieurs problèmes qui ne concernent vraiment que le projet GNU ... pour leur code de base, la chaîne d'outils de base. (Edit (24/05/2014): Il convient de noter que ce type de préoccupation est potentiellement une MAUVAISE inquiétude - Heartbleed provient en partie de cette réflexion et avec des systèmes corrects et modernes, vous avez vraimentn'ont aucune entreprise qui s'occupe de la plupart des corrections apportées par Autotools. GNU doit probablement faire une suppression brutale de la base de code, à la lumière de ce qui s'est passé avec Heartbleed) Vous pouvez l'utiliser pour faire votre projet et cela pourrait bien fonctionner pour un petit projet que vous ne vous attendez pas à travailler ailleurs que Linux ou où la chaîne d'outils GNU fonctionne clairement correctement. L'affirmation selon laquelle il "s'intègre bien avec Linux" est assez audacieuse et tout à fait incorrecte . Il s'intègre raisonnablement bien à la suite d'outils GNU et résout les problèmes que l'informatique a avec ses objectifs.
Cela ne veut pas dire qu'il n'y a aucun problème avec les autres options discutées dans le fil ici.
SCons est plus un remplacement pour Make / GMake / etc. et semble assez agréable, tout bien considéré Cependant ...
Les exemples donnés pour CMake dans ce fil sont un peu faux.
Toutefois...
En vérité, vos objectifs doivent dicter ce que vous choisissez ici.
Il y a une raison pour laquelle de nombreux projets abandonnent qmake, Autotools, etc. et passent à CMake. Jusqu'à présent, je peux m'attendre à ce qu'un projet basé sur CMake tombe dans une situation de compilation croisée ou sur une configuration VisualStudio ou n'ait besoin que d'une petite quantité de nettoyage car le projet ne tenait pas compte des parties Windows ou OSX uniquement à la base de code. Je ne peux pas vraiment m'attendre à ce que sur un projet basé sur SCons - et je m'attends à ce qu'un tiers ou plus de projets Autotools se soient trompés QUELQUE CHOSE ce qui l'empêche de se construire correctement dans n'importe quel contexte, à l'exception de celui de l'hôte ou de Scratchbox2.
Une distinction importante doit être faite entre les utilisateurs des outils. Cmake est un outil qui doit être utilisé par l'utilisateur lors de la construction du logiciel. Les outils automatiques sont utilisés pour générer une archive tar de distribution qui peut être utilisée pour créer le logiciel en utilisant uniquement les outils standard disponibles sur tout système compatible SuS. En d'autres termes, si vous installez un logiciel à partir d'une archive tar qui a été créée à l'aide des outils automatiques, vous n'utilisez pas les outils automatiques . D'autre part, si vous installez un logiciel qui utilise Cmake, vous êtes utilisez Cmake et doit avoir installé le logiciel pour construire.
La grande majorité des utilisateurs n'ont pas besoin d'avoir les outils automatiques installés sur leur box. Historiquement, une grande confusion a été causée parce que de nombreux développeurs distribuent des tarballs malformés qui forcent l'utilisateur à exécuter autoconf pour régénérer le script de configuration, et il s'agit d'une erreur de package. Plus de confusion a été causée par le fait que la plupart des principales distributions Linux installent plusieurs versions des outils automatiques, alors qu'elles ne devraient en installer aucune par défaut. Encore plus de confusion est causée par les développeurs qui tentent d'utiliser un système de contrôle de version (par exemple, cvs, git, svn) pour distribuer leurs logiciels plutôt que de construire des tarballs.
asciidoc
ou help2man
ou doxygen
ou, surtout, de la bonne combinaison d'outils automatiques. Cela a été un énorme problème de marketing pour les outils automatiques. Les utilisateurs pensent à tort qu'ils ont besoin d'autoconf installé car ils ne comprennent pas la différence entre l'archive tar et le VCS.
Il ne s'agit pas de normes de codage GNU.
Les avantages actuels des outils automatiques - en particulier lorsqu'ils sont utilisés avec automake - sont qu'ils s'intègrent très bien à la construction de la distribution Linux.
Avec cmake par exemple, c'est toujours "était-ce -DCMAKE_CFLAGS ou -DCMAKE_C_FLAGS dont j'ai besoin?" Non, ce n'est ni l'un ni l'autre, c'est "-DCMAKE_C_FLAGS_RELEASE". Ou -DCMAKE_C_FLAGS_DEBUG. C'est déroutant - dans autoconf, c'est juste ./configure CFLAGS = "- O0 -ggdb3" et vous l'avez.
En intégration avec des infrastructures de build, scons a le problème que vous ne pouvez pas utiliser make %{?_smp_mflags}
, _smp_mflags
dans ce cas, c'est une macro RPM qui se développe approximativement pour (l'administrateur peut le définir) la puissance du système. Les gens mettent des choses comme -jNCPUS ici à travers leur environnement. Avec scons qui ne fonctionne pas, les packages utilisant scons ne peuvent donc obtenir que des distributions intégrées en série.
./configure CFLAGS=-O0
échoue souvent avec les packages qui remplacent CFLAGS dans le makefile et nécessitent à la place que l'utilisateur s'exécute ./configure --enable-debug
. (par exemple tmux
).
Ce qu'il est important de savoir sur les Autotools, c'est qu'ils ne sont pas un système de construction général - ils implémentent les normes de codage GNU et rien d'autre. Si vous voulez créer un package qui respecte toutes les normes GNU, alors les Autotools sont un excellent outil pour le travail. Si vous ne le faites pas, vous devez utiliser Scons ou CMake. (Par exemple, voir cette question .) Ce malentendu courant est à l'origine de la plupart des frustrations liées aux outils automatiques.
AUTOMAKE_OPTIONS = -foreign
dans votre Makefile.am
. (Ou -foreign
dans votre autogen.sh
. Je pense que presque tout le monde l'utilise.)
installcheck
et distclean
. Si vous essayez de changer ce type de comportement tout en utilisant Autotools, vous perdez simplement votre temps.
Alors que du point de vue des développeurs, cmake est actuellement le plus facile à utiliser, du point de vue utilisateur, les outils automatiques ont un gros avantage
les autotools génèrent un script de configuration de fichier unique et tous les fichiers pour le générer sont livrés avec la distribution. il est facile à comprendre et à corriger à l'aide de grep / sed / awk / vi. Comparez cela à Cmake où de nombreux fichiers se trouvent dans / usr / share / cmak * / Modules, qui ne peuvent pas être corrigés par l'utilisateur à moins qu'il n'ait un accès administrateur.
Donc, si quelque chose ne fonctionne pas tout à fait, il peut généralement être facilement «corrigé» en utilisant des outils Unix standard (grep / sed / awk / vi, etc.) de manière efficace sans avoir à comprendre le système de construction.
Avez-vous déjà fouillé dans votre répertoire de construction cmake pour découvrir ce qui ne va pas? Comparé au simple shellscript qui peut être lu de haut en bas, suivre les fichiers Cmake générés pour découvrir ce qui se passe est assez difficile. De plus, avec CMake, l'adaptation des fichiers FindFoo.cmake nécessite non seulement une connaissance du langage CMake, mais également des privilèges de superutilisateur.