IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Systèmes de compilation Discussion :

CMake 2.8 et link des libs interne a la solution Visual Studio


Sujet :

Systèmes de compilation

  1. #1
    Membre régulier Avatar de Groove
    Inscrit en
    Décembre 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 97
    Points : 93
    Points
    93
    Par défaut CMake 2.8 et link des libs interne a la solution Visual Studio
    Bonjour,

    Je voudrais passer a CMake 2.8 pour commencer a utiliser Visual Studio 2010.

    Malheureusement il semblerait que des changements on été effectuer entre la 2.6 et la 2.8 au niveau du linkage des libraries interne a la solution.

    Avec CMake 2.6 il suffit d'utiliser add_dependencies(${EXE} ${LIB}) et EXE est linker avec LIB. Avec CMake 2.8 ca ne semble pas marcher que ce soit avec Visual Studio 2010, 2008 ou 2005 ...

    LIB est une target compiler par la solution tout comme EXE.

    Bref ma question est simplement comment linker les libraries d'une solution un l'exécutable de cette solution avec CMake 2.8

    Merci,
    Christophe

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Je ne suis pas convaincu que ton utilisation de CMake soit correcte, que ce soit en 2.6 ou 2.8. Je suis même étonné que cela marchait sous 2.6. Il faut faire
    add_library (lib ${lib_SOURCES})

    add_executable (exe ${exe_SOURCES})

    target_link_libraries (exe lib)
    add_dependencies permet d'indiquer l'ordre de compilation des cibles. Dans le cas des librairies et des exécutables, l'ordre est automatiquement déduit.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 72
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par aoyou Voir le message
    Je ne suis pas convaincu que ton utilisation de CMake soit correcte, que ce soit en 2.6 ou 2.8. Je suis même étonné que cela marchait sous 2.6. Il faut faire


    add_dependencies permet d'indiquer l'ordre de compilation des cibles. Dans le cas des librairies et des exécutables, l'ordre est automatiquement déduit.

    Ca ça reste à prouver... car en pratique si le nom de l'exécutable vient avant celui de la librairie dans l'ordre alphabétique, l'exécutable sera compilé avant la librairie. Et peu importe l'ordre dans lequel ils sont placé dans CMakeLists !

    C'est aberrant...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Ca ça reste à prouver...
    Preuve par l'image (fichier dep.PNG ci-joint). L'ordre des dépendances est parfaitement respecté. Et c'est justement un point fort de CMake. Je l'utilise sur des projets beaucoup plus importants que cet exemple et je n'ai jamais eu de problèmes avec les dépendances (à l'exception de la version 2.6.0 qui ne recompilait pas les dépendances mais ça a été très vite corrigé)

    Les fichiers utilisés sont

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #CMakeLists.txt
    project (libdep C)
    cmake_minimum_required (VERSION 2.4)
    add_library (mylib lib.c)
    add_executable (myexe exe.c)
    target_link_libraries (myexe mylib)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /* lib.c */
    void f () {}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /* exe.c */
    void f ();
    int main () {
      f ();
      return 0;
    }
    car en pratique si le nom de l'exécutable vient avant celui de la librairie dans l'ordre alphabétique, l'exécutable sera compilé avant la librairie. Et peu importe l'ordre dans lequel ils sont placé dans CMakeLists ! C'est aberrant...
    Ce sont ces propos qui sont aberrants. L'ordre alphabétique n'a aucun rapport avec les dépendances. Il en est de même pour l'ordre dans le fichier CMakeLists.txt.
    Images attachées Images attachées  

Discussions similaires

  1. [Débutant] Importer des données Excel sur une interface Visual Studio
    Par Nicoow44 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 07/07/2014, 11h48
  2. [Débutant] Ajouter des composant Xceed à la boite à outil visual studio 2005
    Par Poupou61 dans le forum VB.NET
    Réponses: 3
    Dernier message: 25/04/2012, 10h29
  3. Réponses: 9
    Dernier message: 17/11/2009, 14h50
  4. Réponses: 1
    Dernier message: 29/06/2009, 11h11
  5. Comment voir les opérations internes en cours sur Visual Studio ?
    Par clementratel dans le forum Microsoft BI
    Réponses: 0
    Dernier message: 21/04/2008, 09h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo