Developpez.com - Rubrique C

Le Club des Développeurs et IT Pro

Introduction au système de construction logicielle CMake

Par Florian Goujeon

Le 2009-01-16 23:16:20, par Florian Goo, Membre éclairé
Bonjour à tous,

Ce sujet est consacré aux commentaires relatifs à l'article « Initiation à CMake » : http://florian-goujeon.developpez.co...ke/initiation/

  Discussion forum
8 commentaires
  • spidermario
    Membre éprouvé
    Excellent, excellent

    Pour ma part j'utilisais déjà CMake, je le trouve génial et trouve que c'est dommage que si peu de programmes et de bibliothèques l'utilisent.

    Ce tuto m'a permis d'en savoir plus sur CMakeCache.txt, merci pour ça
  • Florian Goo
    Membre éclairé
    Je suis bien d'accord avec toi !
    Merci pour ce commentaire enthousiaste
  • krieg
    Membre régulier
    Bonjour,
    je suis pour ma part en train de réaliser le passage de la librairie pour laquelle
    je travail, et franchement c'est pas mal.
    Mais il manque une chose principe sur les tutos c'est comment tester les
    librairies présentes et les options de compilations.
    Bye
  • Alp
    Expert éminent sénior
    Que veux-tu dire par "tester" ?
    Tu veux dire "vérifier qu'elles sont présentes sur le système qui compile" ?
  • krieg
    Membre régulier
    Oui, avant on était sur un système type autoconf automake configure....
    autoconf et automake permettait de connaître les caractéristiques du système qui compile. Je sais que cela est réalisable mais je n'ai pas encore trouvé
    toutes les informations nécessaire.
  • Florian Goo
    Membre éclairé
    Bonjour Krieg,

    À ma connaissance, le seul moyen d'effectuer une recherche automatique de bibliothèque avec CMake est d'utiliser un module, ce qui correspond à la « méthode assistée » évoquée dans le cours. Lorsque la bibliothèque n'a pas été trouvée, la commande cmake renvoie un message similaire à ce que peut renvoyer ./configure lorsqu'un test de bibliothèque échoue.

    De plus, les autotools fonctionnent avec simplicité sur ce point, vu que par conception sous UNIX les fichiers sont bien rangés dans /usr/lib et /usr/include, ce qui n'est pas le cas sous Windows. Et vu que CMake est également censé fonctionner sous Windows… on se retrouve bridé par le maillon le plus faible de la chaine !

    Cela dit, je n'ai jamais utilisé les autotools en tant que développeur, donc je passe peut-être à côté d'une commande cmake similaire que j'aurais dû mettre en valeur dans le cours. Si tel était le cas, j'accueillerais avec plaisir des infos sur le sujet, et je m'empresserais de mettre à jour le cours .

    EDIT : À première vue, tu pourrais peut-être être intéressé par la commande find_library : http://www.cmake.org/cmake/help/cmak...d:find_library
  • krieg
    Membre régulier
    Salut,
    j'ai continué ma recherche et en effet j'ai trouvé les commande qui m'interessent, à savoir:
    Code :
    1
    2
    3
    INCLUDE(CheckIncludeFiles)
    CHECK_INCLUDE_FILES( alloca.c C_ALLOCA)
    C_ALLOCA qui est à true si il trouve alloca.c
    dans le meme style

    Code :
    1
    2
    3
    4
    5
    6
    INCLUDE(CheckFunctionExists)
    CHECK_FUNCTION_EXISTS( fork HAVE_FORK)
    
    include(CheckTypeSize)
    check_type_size("long long" SIZEOF_LONG_LONG)
    ainsi avec :

    Code :
    1
    2
    3
      CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in" 
          "${PROJECT_BINARY_DIR}/include/${PROJECT_NAME}_config.h")
    je crée le fichier qui dont j'ai besoin (comme cela est fait avec autoconf et automake).

    maintenant je cherche à créer le fichier kaapi.pc pour pkg-config afin de crée tout ce qui faut pour linker avec notre librairie (kaapi un peu de pub ça ne fait pas de mal (elle est gratuite)).
    Voila,
  • alexises
    Membre à l'essai
    cette article est plutot bon
    le seul prob c'est qu'il manque en contenu
    une approche de cpack et ctest serait cool ainsi que sur des structure plus avancée.
    je ne trouve de plus que peut de support pour cmake ce qui est bien dommage même la ml ne peut me répondre :/