p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre émérite
    Homme Profil pro
    F5(){F5}
    Inscrit en
    avril 2008
    Messages
    547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : F5(){F5}
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2008
    Messages : 547
    Points : 835
    Points
    835

    Par défaut cmake & linking objects

    Bonjour,

    J'essaie actuellement d'écrire quelques tests unitaires à l'aide de cmake. J'ai néanmoins un problème d'include.

    L'arborescence du projet à cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ./sources
    ./sources/toto.h
    ./sources/toto.cxx
    ./sources/qt_ui
    ./sources/qt_ui/ui_toto.h
    ./tests
    ./tests/sources/
    ./tests/sources/totoTest.cxx
    Ce que je désire c'est dans totoTest.cxx inclure toto.h
    dans le dossier ./tests/sources/CMakeLists.txt, j'écris donc quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/sources)
    IF(BUILD_TESTING)
      ADD_EXECUTABLE(totoTest totoTest.cxx)
    #   TARGET_LINK_LIBRARIES(totoTest toto)
      ADD_TEST(NAME totoTest COMMAND totoTest
    ENDIF(BUILD_TESTING)
    et dans totoTest.h :
    dans toto.h
    l'executable toto se compile bien.
    En revanche, l'executable totoTest me dit que dans le fichier toto.h on ne trouve pas ui_toto.h
    Le truc, c'est quand dans le dossier ./sources, j'ai un CMakeLists.txt qui wrap mes .h pour les lier aux .ui de QT.

    S'agit-il de se débrouiller pour faire construire le toto.h à l'aide du makefile généré par le CMakeLists.txt du dossier ./sources, ou peut-on simplement squizzer ce problème en liant directement l'executable totoTest à l'objet toto.o (au quel cas quel include à mettre?)

    Un autre point que je n'ai pas compris est le role de target_link_librairies qui, commentée ou pas, n'influence en rien le problème.

    Merci!

  2. #2
    Membre émérite
    Homme Profil pro
    F5(){F5}
    Inscrit en
    avril 2008
    Messages
    547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : F5(){F5}
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2008
    Messages : 547
    Points : 835
    Points
    835

    Par défaut

    oki, alors voilà ce qu'il fallait faire :
    on peut faire des includes directories pour les lib QT. et idem targetter les éventuelles dépendances.
    la seule subilité c'est de penser à inclure les moc.cxx générés par QT.

    Du coup (c'est pas super mais c'est une solution), jenquille une variable (qui correspond aux sources attachés au binaire) dans le cache depuis le CMakeLists.txt qui génère le binaire (à l'aide de set(maVar values CACHE INTERNAL DOCSTRING), et je recupere cette variable dans le CMakeLists.txt qui génère le binaire de test.

  3. #3
    Membre Expert
    Inscrit en
    mars 2005
    Messages
    865
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 865
    Points : 1 063
    Points
    1 063

    Par défaut

    Ce que tu fais me paraît bien compliqué...

    Est-ce que tu utilises les macros Qt fournis par CMake ?

  4. #4
    Membre émérite
    Homme Profil pro
    F5(){F5}
    Inscrit en
    avril 2008
    Messages
    547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : F5(){F5}
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2008
    Messages : 547
    Points : 835
    Points
    835

    Par défaut

    ben j'utilise les QT_WRAP pour mocker les .ui de qt et les moc_... de qt, et c'est tout.

    J'utilise aussi les variables QT_xxx_DIR pour les eventuelles librairies QT utilisées.

    Pour l'instant, je transforme l'ensemble des sources de mon exe en exeLib, et crèe mes exe de tests en ajoutant la target_library exeLib ( et les éventuelles libs externes ).

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

Discussions similaires

  1. acceder a un linked object
    Par olibara dans le forum MS SQL-Server
    Réponses: 1
    Dernier message: 12/05/2013, 14h18
  2. CMake 2.8 et link des libs interne a la solution Visual Studio
    Par Groove dans le forum Outils pour C & C++
    Réponses: 3
    Dernier message: 18/02/2010, 22h17
  3. Link Framework SFML avec CMake
    Par dzada dans le forum Apple
    Réponses: 5
    Dernier message: 16/11/2009, 12h10
  4. Problème de link avec glut et CMake
    Par Ange44 dans le forum C++
    Réponses: 7
    Dernier message: 24/09/2008, 15h33
  5. Cannot use object linking or embeding
    Par LefortLudovic dans le forum Excel
    Réponses: 3
    Dernier message: 04/01/2008, 17h43

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