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

Qt Discussion :

Compiler quand les sources et les en-têtes sont dans des dossiers séparés


Sujet :

Qt

  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut Compiler quand les sources et les en-têtes sont dans des dossiers séparés
    Bonjour,

    J'ai un projet qui compile et fonctionne très bien quand tous les fichiers (headers et sources) sont dans un dossier unique. Quand j'essaye de faire des dossiers séparés, je ne m'en sors pas...

    J'ai généré mon .pro automatiquement, avec qmake -project, et je l'ai édité pour rajouter le module SQL et modifier la variable INCLUDEPATH (ou DEPENDPATH je ne sais plus). J'ai ça :

    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
     
    TEMPLATE = app
    TARGET = 
    DEPENDPATH += . headers sources
    INCLUDEPATH += . headers sources
     
    QT += sql
     
    # Input
    HEADERS += headers/messagesUtilisateur.h \
               headers/myAboutTab.h \
               headers/myAddTab.h \
               headers/myMainWindow.h \
               headers/mySearchTab.h \
               headers/mySQL.h \
               headers/myWelcomeTab.h
    SOURCES += sources/main.cpp \
               sources/myAboutTab.cpp \
               sources/myAddTab.cpp \
               sources/myMainWindow.cpp \
               sources/mySearchTab.cpp \
               sources/mySQL.cpp \
               sources/myWelcomeTab.cpp

    J'essaye ensuite de compiler, mais les fichiers ne sont pas trouvés...

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Setting up a MinGW/Qt only environment...
    -- QTDIR set to C:\Qt\2010.04\qt
    -- PATH set to C:\Qt\2010.04\qt\bin
    -- Adding C:\Qt\2010.04\bin to PATH
    -- Adding C:\Windows\System32 to PATH
    -- QMAKESPEC set to win32-g++
     
    C:\Qt\2010.04\qt>cd c:\Projets\DiskDB
     
    c:\Projets\DiskDB>qmake
     
    c:\Projets\DiskDB>mingw32-make
    mingw32-make -f Makefile.Debug
    mingw32-make[1]: Entering directory `c:/Projets/DiskDB'
    g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
    DQT_DLL -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_Q
    MAIN -I"..\..\Qt\2010.04\qt\include\QtCore" -I"..\..\Qt\2010.04\qt\include\QtGui
    " -I"..\..\Qt\2010.04\qt\include\QtSql" -I"..\..\Qt\2010.04\qt\include" -I"." -I
    "..\..\Qt\2010.04\qt\include\ActiveQt" -I"debug" -I"..\..\Qt\2010.04\qt\mkspecs\
    win32-g++" -o debug\main.o sources\main.cpp
    sources\main.cpp:4:19: error: mySQL.h: No such file or directory
    sources\main.cpp:5:33: error: messagesUtilisateur.h: No such file or directory
    sources\main.cpp:6:26: error: myMainWindow.h: No such file or directory
    sources\main.cpp:7:26: error: myWelcomeTab.h: No such file or directory
    sources\main.cpp:8:22: error: myAddTab.h: No such file or directory
    sources\main.cpp: In function 'int qMain(int, char**)':
    sources\main.cpp:20: error: 'MySQL_openDatabase' was not declared in this scope
    sources\main.cpp:28: error: 'MyMainWindow' was not declared in this scope
    sources\main.cpp:28: error: expected ';' before 'fenetrePrincipale'
    sources\main.cpp:31: error: 'fenetrePrincipale' was not declared in this scope
    sources\main.cpp:40: error: 'QMessageBox' has not been declared
    sources\main.cpp:42: error: 'MESSAGE_ERREUR_CONNEXION' was not declared in this
    scope
    sources\main.cpp:48: error: 'QMessageBox' has not been declared
    sources\main.cpp:50: error: 'MESSAGE_ERREUR_CREATION_BDD' was not declared in th
    is scope
    sources\main.cpp:56: error: 'QMessageBox' has not been declared
    sources\main.cpp:58: error: 'MESSAGE_ERREUR_CONNEXION' was not declared in this
    scope
    sources\main.cpp:62: error: invalid use of incomplete type 'struct QDebug'
    ..\..\Qt\2010.04\qt\include/QtCore/../../src/corelib/global/qglobal.h:1632: erro
    r: forward declaration of 'struct QDebug'
    ..\..\Qt\2010.04\qt\include/QtCore/../../src/corelib/global/qglobal.h: At global
     scope:
    ..\..\Qt\2010.04\qt\include/QtCore/../../src/corelib/global/qglobal.h:1635: warn
    ing: inline function 'QDebug qDebug()' used but never defined
    mingw32-make[1]: *** [debug/main.o] Error 1
    mingw32-make[1]: Leaving directory `c:/Projets/DiskDB'
    mingw32-make: *** [debug] Error 2

    Et pour information les fichiers du dossier contenant le projet :

    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
     
    c:\Projets\DiskDB>dir
     Le volume dans le lecteur C n'a pas de nom.
     Le numéro de série du volume est 240F-B760
     
     Répertoire de c:\Projets\DiskDB
     
    26/07/2011  08:34    <REP>          .
    26/07/2011  08:34    <REP>          ..
    26/07/2011  08:34    <REP>          debug
    25/07/2011  08:10             1 199 DiskDB.cbp
    25/07/2011  08:10             1 607 DiskDB.layout
    26/07/2011  08:35               836 DiskDB.pro
    26/07/2011  08:33    <REP>          headers
    27/09/2010  23:19            17 436 imageQt.png
    26/07/2011  08:35             5 891 Makefile
    26/07/2011  08:35             8 072 Makefile.Debug
    26/07/2011  08:35             8 230 Makefile.Release
    26/07/2011  08:35               237 object_script.DiskDB.Debug
    26/07/2011  08:35               257 object_script.DiskDB.Release
    26/07/2011  08:34    <REP>          release
    26/07/2011  08:33    <REP>          sources
    24/07/2011  23:11             3 473 TODO.txt
                  10 fichier(s)           47 238 octets
                   6 Rép(s)  129 250 426 880 octets libres

    Je précise enfin que j'utilie Windows 7 et ma version de Qt doit être 4.6.


    Ma question est simple : quelle variable renseignée et comment surtout, pour que ça compile (et linke et tout le bazar) ?

    Merci d'avance

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 894
    Points : 219 537
    Points
    219 537
    Billets dans le blog
    124
    Par défaut
    Bonjour,

    Il faut rajouter les noms de dossiers avec la variable
    INCLUDEPATH
    Mais sinon, je ne vois pas trop le problème, car il me semble que vous l'avez fait.

    Il semble aussi que vous devez relancer qmake pour avoir un makefile correct.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    J'ai exécuté la commande qmake après avoir édité mon fichier .pro, de sorte qu'il devrait être en conformité... Pensez-vous que la façon de renseigner la variable INCLUDEPATH est mauvaise ? C'est comme ça que qmake -project l'a renseigné, donc j'en doute fort. Je n'ai pas clairement saisi la différence en INCLUDEPATH et DEPENDPATH dans la documentation, avez-vous une idée plus précise ?

    Je vais essayer de regarder le contenu du fichier makefile, n'ayant jamais regardé de genre de fichier, je vais bien m'amuser ^^

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Salut,

    Dans tes .cpp, quand tu fais tes includes, t'as changé les emplacements ?

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Non. J'ai laissé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "monFichier.h"
    et je n'ai pas mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "../headers/monFichier.h"
    .

    Je me suis posé la question : est-ce obligatoire de donner le chemin lors d'un #include ? Pour vérifier, j'ai un projet avec CodeBlocks, en C. Il suffit de renseigner correctement les dossiers de recherche de fichiers, dans le menu "build options". Le compilateur trouve les fichiers, les inclut et crée l'exécutable comme il faut. Certes, le projet qui me pose soucis est en Qt, mais C-->C++-->Qt. J'ai donc estimé que le comportement est transposable, d'autant plus que le compilateur est mingw.


    Ce qui me dérange dans l'écriture du chemin relatif dans les #include est que tu es obligé d'éditer tes fichiers sources si tu souhaites changer l'emplacement de tes fichiers. A mon sens, renseigner les chemins devrait être faits dans les options du compilateur.


    Suis-je trop exigeant de demander cela ? Me trompe-je sur ces histoires de chemins ?

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 894
    Points : 219 537
    Points
    219 537
    Billets dans le blog
    124
    Par défaut
    Bah, vous ne demandez pas quelque chose d'impossible. Et il est normalement possible d'indiquer des dossiers supplémentaires dans un .pro pour que le compilateur regarde dedans lors de l'accès au .h.

    À part si vous avez fait une faute entre les inclusions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include "myFile.h"
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <myFileSystem.h"
    il ne devrait pas y avoir de problème.
    Je l'ai fait récemment et tout allait bien.

    INCLUDEPATH += ../Module/Sources

    INCLUDEPATH += ../../3DViewer/Sources/
    Voilà ce que j'avais rajouté.
    Ainsi, les fichiers étaient accessible à l'inclusion (sans spécifier les chemins relatifs).

    Maintenant, pourquoi ai-je parler de qmake?
    Simplement que dans votre premier message on voit la compilation suivante:

    g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
    DQT_DLL -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_Q
    MAIN -I"..\..\Qt\2010.04\qt\include\QtCore" -I"..\..\Qt\2010.04\qt\include\QtGui
    " -I"..\..\Qt\2010.04\qt\include\QtSql" -I"..\..\Qt\2010.04\qt\include" -I"." -I
    "..\..\Qt\2010.04\qt\include\ActiveQt" -I"debug" -I"..\..\Qt\2010.04\qt\mkspecs\
    win32-g++" -o debug\main.o sources\main.cpp
    Et que s'il avait pris votre INCLUDEPATH, il aurait rajouté:
    -Iheaders -Isources
    Voilà... je ne sais pas trop d'ou cela vient.

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Ahhhhhhhhhhh! Votre message m'a permis de trouver la solution !

    J'ai modifié le .pro en changeant les chemins indiqués à la variables INCLUDEPATH de la manière suivante :

    INCLUDEPATH += .
    INCLUDEPATH += ./sources
    INCLUDEPATH += ./headers
    J'ai fait appel à qmake et j'ai vérifié la prise en compte des répertoires (exemple dans le fichier MakeFile.debug) :

    INCPATH = -I"..\..\Qt\2010.04\qt\include\QtCore" -I"..\..\Qt\2010.04\qt\include\QtGui" -I"..\..\Qt\2010.04\qt\include\QtSql" -I"..\..\Qt\2010.04\qt\include" -I"." -I"sources" -I"headers" -I"..\..\Qt\2010.04\qt\include\ActiveQt" -I"debug" -I"..\..\Qt\2010.04\qt\mkspecs\win32-g++"
    La compilation avec mingw32-make s'est ensuite passée correctement.



    Bon, par contre, quand j'ai voulu faire le test inverse, c'est-à-dire remettre mon fichier .pro du premier post, le qmake a correctement renseignée la valeur de INCPATH. Et la compilation s'est bien passée....

    Bref... Bizarre.

    Merci pour votre aide

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/10/2009, 10h33

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