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

Outils Discussion :

Édition de lien avec CMake [Compilation]


Sujet :

Outils

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Édition de lien avec CMake
    Bonjour à tous,

    Voilà ça fait un moment maintenant que je cherche. je l'ai fait un peu partout, bien que la même réponse soit donnée à chaque fois. Apparemment la réponse a marché avec d'autres personnes mais malheureusement pour moi le problème persiste.

    mon projet se divise comme suit :
    • build
    • src
      • main.cpp
      • finddialog.h
      • finddialog.cpp
    • CMakeLists.txt


    Voilà mon CMakeLists.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    cmake_minimum_required(VERSION 2.6)
    # set project's name
    PROJECT( qtsample )
     
    # with SET() command you can change variables or define new ones
    # here we define SAMPLE_SRCS variable that contains a list of all .cpp files
    # note that we don't need \ at the end of line
    SET( SAMPLE_SRCS
         ./src/main.cpp
         ./src/finddialog.cpp
    )
     
    # another list, this time it includes all header files that should be treated with moc
    SET( SAMPLE_MOC_HDRS
     ./src/finddialog.h
    )
     
    # enable warnings
    ADD_DEFINITIONS( -Wall )
     
    # this command finds Qt4 libraries and sets all required variables
    # note that it's Qt4, not QT4 or qt4
    FIND_PACKAGE( Qt4 REQUIRED )
     
    # add some useful macros and variables
    # (QT_USE_FILE is a variable defined by FIND_PACKAGE( Qt4 ) that contains a path to CMake script)
    INCLUDE( ${QT_USE_FILE} )
     
    # and finally this will run moc:
    QT4_WRAP_CPP( SAMPLE_MOC_SRCS ${SAMPLE_MOC_HDRS} )
     
    # we need this to be able to include headers produced by uic in our code
    # (CMAKE_BINARY_DIR holds a path to the build directory, while INCLUDE_DIRECTORIES() works just like INCLUDEPATH from qmake)
    INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} )
     
    # here we instruct CMake to build "sample" executable from all of the source files
    ADD_EXECUTABLE( qtsample ${SAMPLE_SRCS} ${SAMPLE_MOC_HDRS} )
     
    # last thing we have to do is to tell CMake what libraries our executable needs,
    # luckily FIND_PACKAGE prepared QT_LIBRARIES variable for us:
    TARGET_LINK_LIBRARIES( qtsample ${QT_LIBRARIES} )
    et l'erreur que j'obtiens :
    CMakeFiles/qtsample.dir/src/main.cpp.o: In function `FindDialog::~FindDialog()':
    main.cpp: (.text._ZN10FindDialogD2Ev[_ZN10FindDialogD5Ev]+0x13): undefined reference to `vtable for FindDialog'
    main.cpp: (.text._ZN10FindDialogD2Ev[_ZN10FindDialogD5Ev]+0x1f): undefined reference to `vtable for FindDialog'
    CMakeFiles/qtsample.dir/src/finddialog.cpp.o: In function `FindDialog::FindDialog(QWidget*)':
    finddialog.cpp: (.text+0x5c): undefined reference to `vtable for FindDialog'
    finddialog.cpp: (.text+0x6b): undefined reference to `vtable for FindDialog'
    CMakeFiles/qtsample.dir/src/finddialog.cpp.o: In function `FindDialog::tr(char const*, char const*)':
    finddialog.cpp: (.text._ZN10FindDialog2trEPKcS1_[FindDialog::tr(char const*, char const*)]+0x21): undefined reference to `FindDialog::staticMetaObject'
    collect2: ld a retourné 1 code d'état d'exécution
    make[2]: *** [qtsample] Erreur 1
    make[1]: *** [CMakeFiles/qtsample.dir/all] Erreur 2
    make: *** [all] Erreur 2
    Merci.

    [Edit]: Problème résolu, d'ailleurs l'erreur était dans le fait que j'ajoutais le ${SAMPLE_MOC_HDRS} dans ADD_EXECUTABLE, alors qu'il fallait mettre ${SAMPLE_MOC_SRCS}.

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 673
    Points : 188 664
    Points
    188 664
    Par défaut


    Qu'as-tu déjà essayé ? Là, il semblerait que les fichiers produits par le moc ne sont pas inclus dans ce que tu compiles (maintenant, je n'ai jamais réussi à utiliser CMake, je ne pourrai pas t'aider plus avant, mais ça pourrait aider un autre à te répondre ).

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Qu'as-tu déjà essayé ?
    Alors j'ai déjà essayé avec qt4_automoc, j'ai déjà essayé d'inclure le fichier moc_*.cxx produit dans mon finddialog.cpp, j'ai déjà essayé de commenter tous mes signaux et slots.

    Mais pour l'instant je n'ai pas encore réussi à faire marcher mon code. La seule façon pour que ça compile est d'enlever le Q_OBJECT de mon header. mais du coup je n'ai plus accès à mes signaux et slots...

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 673
    Points : 188 664
    Points
    188 664

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Oui d'ailleurs c'est par là que j'ai commencé. Fini sur http://www.qtcentre.org/wiki/index.p...pps_with_CMake mais pour l'instant ça ne marche pas :-/

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

Discussions similaires

  1. Édition des liens avec CMake sous MacOS X
    Par Le Farfadet Spatial dans le forum ALM
    Réponses: 0
    Dernier message: 18/02/2011, 03h45
  2. Réponses: 0
    Dernier message: 21/01/2011, 15h29
  3. Ordre de l'édition des liens avec GCC
    Par Matthieu Brucher dans le forum Linux
    Réponses: 6
    Dernier message: 29/08/2006, 07h56
  4. Erreur d'édition de liens avec __imp__RegCloseKey
    Par gdpasmini dans le forum MFC
    Réponses: 2
    Dernier message: 23/03/2006, 14h18
  5. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 14h50

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