web-dev-qa-db-fra.com

Comment convertir un projet Autotools en projet CMake?

Donc, il semble y avoir beaucoup d'écriture sur le sujet des Autotools contre CMake, mais pour la vie de moi, je n'arrive pas à trouver un bon tutoriel sur la façon de convertir un projet à partir d'Autotools (Makefile.am et configure.ac fichiers) vers CMake (CMakeLists.txt des dossiers). Comment procéder?

53
Kurtis Nusbaum

Il n'y a aucun outil automatisé qui convertira un système de construction arbitraire des outils automatiques en cmake. J'ai converti manuellement quelques projets de taille moyenne. J'aime créer un fichier CMakeLists.txt Pour chaque ensemble de fichiers configure.ac Et/ou Makefile.am, Pour faciliter la conversion des outils automatiques en cmake.

Malheureusement, cette approche manuelle nécessite de développer une expertise dans deux systèmes, dont aucun ne devrait être infligé à un innocent.

  1. Capturez un enregistrement de ce que la construction d'outils automatiques fait réellement sur votre machine. Cela vous aidera à vérifier que votre système de construction CMake compile réellement chaque fichier, en utilisant les mêmes indicateurs de compilation, et crée chaque bibliothèque et exécutable que les autotools font; au moins sur votre machine, avec vos options.

    % ./configure [options de configuration]> configure_autotools.log

    % make> make_autotools.log

    % make install> make_install_autotools.log

  2. Dans chaque répertoire qui contient un fichier configure.ac Ou Makefile.am, Y compris le répertoire racine du projet, créez un nouveau fichier CMakeLists.txt vide. Ajoutez des commandes cmake add_subdirectory (...) à chaque fichier CMakeLists.txt non-feuille pour lier tous les fichiers cmake dans une arborescence. Ajoutez les commandes cmake project () et cmake_minimum_required () en haut de votre fichier CMakeLists.txt de niveau supérieur.

    project(MyProject)
    cmake_minimum_required(VERSION 2.8)
    add_subdirectory(foo)
    
  3. Vous avez maintenant un système de construction cmake cohérent mais inutile qui ne fait rien. Ajoutez temporairement quelques commandes message(...) dans les fichiers CMakeLists.txt plus profonds pour vérifier que tout est correctement connecté. N'oubliez pas que message() est votre ami lors du débogage des problèmes de configuration de cmake. Assurez-vous que votre infrastructure cmake fonctionne en essayant une version maintenant. Rien ne sera construit ou installé; mais il est utile d'exercer l'infrastructure cmake à ce stade.

    % mkdir build_cmake

    % cd build_cmake

    % ccmake -i [racine de votre projet]

    [configurer, configurer, générer]

    % faire VERBOSE = 1

    % faire installer

  4. C'est la partie difficile. Un par un, remplissez vos fichiers CMakeLists.txt. Voici quelques directives:

    • Ouvrez deux éditeurs côte à côte, l'un avec le fichier CMakeLists.txt, l'autre avec le fichier Makefile.am/configure.ac correspondant.

    • Ouvrez votre navigateur à la documentation des commandes cmake .

    • Plutôt que de commencer par le haut, commencez par créer des règles cmake pour construire une petite bibliothèque ou un exécutable, si vous en trouvez un dans le projet (cmake add_library() ou add_executable()). En utilisant cette approche, vous pouvez créer votre conversion une pièce à la fois.

    • Continuez à tester régulièrement votre système de construction cmake pendant que vous ajoutez chaque cible.

    • J'aime utiliser la commande cmake file(GLOB ...) pour créer de manière compacte des listes de fichiers source. Sachez qu'il s'agit d'une opinion controversée.

    • De nombreuses strophes autotools courantes ont des commandes CMake correspondantes. Par exemple, autoconf AC_TRY_COMPILE peut être converti en cmake TRY_COMPILE . Mais la plupart du temps, je trouve que je dois comprendre ce que fait chaque petite strophe d'autotools et comprendre comment écrire le cmake correspondant. En outre, il existe une série de modules CMake qui aide à créer des fichiers config.h de type autotools. Les fichiers Makefile.am sont souvent plus faciles à convertir et peuvent en fait devenir plus compacts après la traduction en cmake.

    • Comparez les résultats de votre construction cmake aux journaux des outils automatiques que vous avez capturés à l'étape 1. Les indicateurs de compilation sont-ils les mêmes? Les mêmes objectifs sont-ils tous construits? Les mêmes fichiers sont-ils installés?

    • Malheureusement, je n'ai pas récemment converti autotools en cmake, donc je ne suis pas en mesure d'écrire un "si vous voyez x dans Makefile.am, écrivez y dans CMakeLists.txt". Quelqu'un peut-il suggérer un bon emplacement pour un wiki public où les gens qui se convertissent activement des outils automatiques en cmake peuvent accumuler un ensemble complet de telles directives? Je ne sais pas si cette réponse stackoverflow est le meilleur endroit pour une telle liste ...

  5. Pour un crédit supplémentaire, une fois que tout fonctionne, ajustez vos règles cmake pour pouvoir créer et exécuter votre projet à partir de Windows Visual Studio. Essayez cela avec les autotools!

85

Cette conversion est très spécifique au projet, ce qui rend difficile la rédaction d'un didacticiel généralement applicable.

Voici le début de certains outils qui peuvent vous donner une idée de ce qu'il faut faire.

http://www.vtk.org/Wiki/CMake#Converters_from_other_buildsystems_to_CMake

===== Un article intéressant à ce sujet:

Pourquoi le projet KDE est passé à CMake - et comment (suite) http://lwn.net/Articles/188693/

11
Hans