Quelles sont les différences entre Autotools, Cmake et Scons?
En vérité, le seul véritable "avantage salvateur" d’Autotools est que c’est ce que tous les GNU projets utilisent largement.
Problèmes avec Autotools:
Cela fonctionne ... la plupart du temps ... est tout ce que vous pouvez dire sur Autotools. C'est un système qui résout plusieurs problèmes qui ne concerne que le projet GNU ... pour leur code de base, chaîne d'outils. (Edit (24/05/2014)): Il convient de noter que ce type de problème est potentiellement MAUVAIS Ce qui doit nous inquiéter - Heartbleed est partiellement issu de cette pensée et avec des systèmes modernes et corrects, vous vraiment n'avez pas Toute entreprise qui gère une grande partie de ce que corrige Autotools. GNU doit probablement supprimer cruellement la base de code, à la lumière de ce qui s’est passé avec Heartbleed). Vous pouvez vous en servir pour réaliser votre projet. pour un projet de petite taille pour lequel vous ne vous attendez pas à travailler ailleurs que sous Linux ou pour lequel l'ensemble d'outils GNU fonctionne clairement. L’affirmation qu’il "s’intègre bien à Linux" est bien la déclaration en gras et assez incorrect . Il s'intègre raisonnablement bien à la suite d'outils GNU et résout les problèmes que le service informatique rencontre avec ses objectifs.
Cela ne veut pas dire qu'il n'y a pas de problèmes avec les autres options discutées dans le fil de discussion ici.
SCons remplace plutôt Make/GMake/etc. et semble jolie Nice, toutes choses considérées Cependant ...
Les exemples donnés pour CMake dans ce fil sont un peu fictifs.
Pourtant...
En vérité, vos objectifs devraient dicter ce que vous choisissez ici.
Il y a une raison pour laquelle de nombreux projets abandonnent qmake, Autotools, etc. et passent à CMake. Jusqu'ici, je peux m'attendre à ce qu'un projet basé sur CMake se retrouve dans une situation de compilation croisée ou dans une configuration de VisualStudio ou n'ait besoin que d'une petite quantité de nettoyage, car le projet ne tenait pas compte des éléments Windows uniquement ou OSX. à la base de code. Je ne peux pas vraiment espérer cela d'un projet basé sur SCons - et je m'attends vraiment à ce qu'un tiers ou plus des projets Autotools aient obtenu QUELQUE CHOSE faux qui empêche de construire correctement sur n'importe quel contexte sauf celui de l'hôte qui en construit ou celui 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 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 construite à l'aide des outils automatiques, vous n'utilisez pas les outils automatiques . D'autre part, si vous installez un logiciel qui utilise Cmake, alors vous utilisez et vous devez l'avoir installé pour construire le logiciel.
La grande majorité des utilisateurs n'ont pas besoin d'installer les outils automatiques sur leur boîte. Historiquement, beaucoup de confusion a été causée par le fait que de nombreux développeurs distribuent des archives mal formées qui forcent l’utilisateur à exécuter autoconf pour régénérer le script configure, ce qui est une erreur de mise en forme. 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. Les développeurs essaient encore plus de confusion en essayant d'utiliser un système de contrôle de version (par exemple, cvs, git, svn) pour distribuer leurs logiciels plutôt que de créer des archives.
Il ne s'agit pas de GNU normes de codage.
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, il faut toujours "était-ce -DCMAKE_CFLAGS ou -DCMAKE_C_FLAGS dont j'avais 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.
Dans l'intégration avec les infrastructures de construction, scons pose le problème suivant: vous ne pouvez pas utiliser make %{?_smp_mflags}
, _smp_mflags
, dans ce cas, il s'agit d'une macro RPM qui se développe grossièrement pour (le pouvoir peut le définir) l'alimentation du système. Les gens placent des choses comme -JNCPUS ici dans leur environnement. Avec des scons qui ne fonctionnent pas, les paquets utilisant scons peuvent uniquement recevoir des distributions intégrées en série.
Ce qu'il est important de savoir sur les outils automatiques, c'est qu'ils ne constituent 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 paquet qui respecte toutes les normes GNU, les outils automatiques sont donc un excellent outil pour le travail. Sinon, vous devriez utiliser Scons ou CMake. (Par exemple, voir cette question .) Cette incompréhension courante est à l'origine de la plupart des frustrations suscitées par Autotools.
Bien que du point de vue des développeurs, cmake soit actuellement le plus facile à utiliser, du point de vue de l'utilisateur, les outils automatiques ont un gros avantage.
autotools génère 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 avec l’aide de grep/sed/awk/vi. Comparez ceci à Cmake où de nombreux fichiers se trouvent dans/usr/share/cmak */Modules, qui ne peuvent pas être corrigés par l'utilisateur à moins d'avoir un accès administrateur.
Ainsi, si quelque chose ne fonctionne pas correctement, il est généralement facile de le "réparer" en utilisant les 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 compilation cmake pour savoir ce qui ne va pas? Comparé au simple script shell qui peut être lu de haut en bas, il est assez difficile de suivre les fichiers Cmake générés pour savoir ce qui se passe. De même, avec CMake, l’adaptation des fichiers FindFoo.cmake requiert non seulement une connaissance du langage CMake, mais peut également nécessiter des privilèges de superutilisateur.