2010-11-29 27 views
0

Je deviens fou de ce problème stupide.Qmake et Make en utilisant des dossiers séparés pour les sources et les en-têtes

J'ai un arbre comme celui-ci:

src 
|--- sources 
     |--- one.cpp 
     |--- two.cpp 
     |--- sources.pro 
|--- headers 
     |--- one.h 
     |--- two.hpp 
     |--- headers.pro 
|--- src.pro 

J'ai tout essayé pour le faire paraître dans les deux dossiers, mais en quelque sorte je ne peux pas le faire fonctionner. Je ne sais pas grand-chose sur QMake, mais je pensais que c'était facile. Et j'avais tort.

Donc en fait je fini par avoir le fichier src.pro de cette façon:

 

QT += dbus 

CONFIG += warn_on 
DEFINES = QT_FATAL_WARNINGS QT_NO_DEBUG_OUTPUT 

devel { 
    DEFINES -= QT_NO_DEBUG_OUTPUT 
} 

OBJECTS_DIR += build 
MOC_DIR += build 

TARGET = example 

[...] 

TEMPLATE = subdirs 
SUBDIRS = sources \ 
      headers 

[...] 
 

Et le sources.pro et headers.pro ainsi:

sources.pro

 

SOURCES = one.cpp \ 
      two.cpp 
 

headers.pro

 

HEADERS = one.h \ 
      two.hpp 
 

Et bien sûr (pas) le problème est qu'il ne voit toujours pas les choses ensemble. Je regardai la documentation aussi, mais je te jure que je ne comprends pas lol

Répondre

2

Cela fait longtemps que je l'ai dû utiliser qmake (longue vie CMake!), Mais ne peut pas vous mettre juste la variable INCLUDEPATH dans votre fichier .pro, à savoir faire quelque chose comme:

INCLUDEPATH += ./sources 
INCLUDEPATH += ./headers 
INCLUDEPATH += ../utils/include 
# (etc, etc.) 

Ensuite, il suffit pointer l'entrée dans votre SOURCES var au dossier sources comme ceci:

SOURCES = sources/one.cpp \ 
      sources/two.cpp 

I Ce n'est pas clair pour moi pourquoi vous utilisez TEMPLATE = subdirs. Il ne semble pas que cela devrait être nécessaire dans votre cas. Ne pouvez-vous pas simplement utiliser TEMPLATE = app (ou TEMPLATE = lib) et en avoir fini? Quelque chose comme ceci:

QT += dbus 
TEMPLATE = app 
TARGET = example 

INCLUDEPATH += ./sources 

SOURCES += sources/one.cpp \ 
      sources/two.cpp 
+0

Merci! Je l'ai juste corrigé en ajoutant INCLUDEPATH + = sources \ headers (que j'ai aussi essayé partiellement avant de poster la question) et en ajoutant le chemin des sources et des en-têtes à tous les fichiers (sources/one.cpp headers/one.h) l'aurait vu comme un dossier unique :) Merci beaucoup! – eij