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

C++ Discussion :

CMake et INCLUDE_DIRECTORIES


Sujet :

C++

  1. #1
    Membre habitué

    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Points : 194
    Points
    194
    Billets dans le blog
    3
    Par défaut CMake et INCLUDE_DIRECTORIES
    Bonjour tout le monde.
    J'a un project CMake qui compile differentes versions d'un meme exe linkes avec x versions d'une lib. Le probleme c'est qu a chaque fois que je sette INCLUDE_DIRECTORIES il m'ajoute les precedents paths meme en utilisant SET_DIRECTORY_PROPERTIES ca n'arrange rien ...
    Si vous avez une solution proprette je suis preneur.

    Merci d'avance.
    -----------------------------------------------
    Dilettante assume

  2. #2
    Membre habitué

    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Points : 194
    Points
    194
    Billets dans le blog
    3
    Par défaut Finalement
    J'ai cree des subdirs avec des CMakeLists crees dynamiquement par celui qui se trouve a la racine. Apparemment pas moyen de faire propre (en tout cas pas naturellement ou alors a travers, peut etre, une bonne macro...).
    -----------------------------------------------
    Dilettante assume

  3. #3
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Citation Envoyé par dclink Voir le message
    J'ai cree des subdirs avec des CMakeLists crees dynamiquement par celui qui se trouve a la racine. Apparemment pas moyen de faire propre (en tout cas pas naturellement ou alors a travers, peut etre, une bonne macro...).
    Hum... Il faut dire qu'en principe on se repose sur le gestionnaire de code source pour gérer les versions d'une bibliothèque (pas en configurant les répertoires des headers)

    Du coup, quand on veut compiler la version "0.3" de "malib", on fait un checkout sur la branche "malib-0.3" et l'affaire est jouée.

  4. #4
    Membre habitué

    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Points : 194
    Points
    194
    Billets dans le blog
    3
    Par défaut
    Hum...Je voulais compiler sur plusieurs versions avec autant d'exes (pour faire des tests QA) ... en meme temps, j'ai du mal a comprendre ta reponse du coup ...
    -----------------------------------------------
    Dilettante assume

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut

    Effectivement, c'est le comportement nominal de CMake.

    Dans ce cas, ne conçois pas ton CMakeList pour utiliser plusieurs versions. Conçois-le pour n'utiliser qu'une seule version, configurable dans le cache via une variable (path vers la LIB, numéro de version, comme bon te semblera). C'est ce qui est utilisé déjà : lorsque CMake ne trouve pas une lib (par exemple OpenCV), tu peux l'aider en renseignant le cache pour lui dire ou la trouver. Ensuite, tu te fais des builds séparés (build_v1, build_v2) dont les caches respectifs pointeront les bonnes versions des libs, et tu obtiendra un exécutable compilé avec celle-ci. A chaque répertoire de build sa version, et les moutons sont biens gardés. Et plus besoin de modifier les CMakeLists pour que ça tourne.

    Si j'ai bien compris, tu veux en fait automatiser cette opération. Mais est-ce vraiment utile pour le produit fini (en vue d'un packaging multi-versions) ou seulement à des fins de tests ?
    Find me on github

  6. #6
    Membre habitué

    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Points : 194
    Points
    194
    Billets dans le blog
    3
    Par défaut
    En effet j'ai fini par faire des subdirs pour chaque version, en creant "dynamiquement" un CMakeLists.txt dans chaque ... Puis add_subdirectory dans le CMakeLists "racine" et effectivement ca marche bien comme ca ... En fait je fais ca parce que nos clients n'utilisent pas tous forcement la meme version de notre lib du coup on se doit de tester chaque release stable. C'est ma premier fois avec cmake, c'etait ca ou Scons
    -----------------------------------------------
    Dilettante assume

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Je pense que la solution avec les subdirs est bien aussi. En revanche la création dynamique de ceux-ci me parait assez hasardeux comme opération :p. Tu dois pouvoir te débrouiller pour avoir un subdir par version et utiliser des macros CMake pour que chacun des CMakeLists dans ces subdirs soit petit et facile à enlever/ajouter.

    Dans le CMakeLists principal, je pense qu'il y a moyen de lire la liste des tes subdirs dynamiquement sans avoir à modifier le fichier.

    Je pense que tu as bien fait ton choix, il semble que SCons soit assez agaçant comme soft.
    Find me on github

  8. #8
    Membre habitué

    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Points : 194
    Points
    194
    Billets dans le blog
    3
    Par défaut
    J'essaierai d'en savoir plus sur cmake pour les prochaines fois, ta solution semble meilleure. Merci en tout cas
    -----------------------------------------------
    Dilettante assume

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    La fin de ce post peut être adaptée à ton cas je pense.
    Find me on github

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CMake comme environnement de développement
    Par Spont dans le forum Choisir un environnement de développement
    Réponses: 8
    Dernier message: 27/11/2007, 14h42
  2. Problème avec cmake : signification d'une erreur
    Par G3G3 dans le forum Systèmes de compilation
    Réponses: 0
    Dernier message: 25/10/2007, 11h24
  3. Kubuntu - KDevelop : cmake non trouvé
    Par Trap D dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 09/07/2007, 10h49
  4. Problèmes d'installation : KDevelop / KUbuntu / CMake
    Par Feriaman dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 03/02/2007, 23h55
  5. cmake vs automake vs bjam
    Par epsilon68 dans le forum Choisir un environnement de développement
    Réponses: 16
    Dernier message: 14/11/2006, 09h22

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