Comment utiliser le modèle de sous-répertoires de QMake?

je commence à apprendre le Qt. Je quitte le monde de Visual Studio et je cherche un moyen d'organiser la structure de mon projet en utilisant QMake. J'ai trouvé la "sous-dossiers" modèle mais j'ai du mal à comprendre.

ma structure de projet ressemble à ceci:

project_dir/
    main.cpp
    project.pro
    logic/
      logic.pro
      some logic files
    gui/
      gui.pro
      gui files

mon" projet 151970920".pro ressemble à ceci

TEMPLATE = subdirs
SUBDIRS = logic \
          gui
SOURCES += main.cpp

dans le .pro les sous-répertoires que j'ai appropriées SOURCES , en-TÊTES et RESSOURCES jeu de variables.

s'il vous Plaît dites-moi ce CIBLE , MODÈLE et de toutes autres valeurs que je devrait mettre dans le .pro "151980920 de fichiers".

aussi, y a-t-il un bon tutoriel QMake autre que le tutoriel officiel?

60
demandé sur jrharshath 2009-09-13 17:43:32
la source

2 ответов

en plus du commentaire de Troubadour , je note que la cible SUBDIRS n'est bonne qu'à spécifier des sous-répertoires. Par conséquent, votre ligne supplémentaire de

SOURCES += main.cpp

dans votre projet.pro fichier est incorrect, et ne sera vraisemblablement pas pour construire votre main.fichier cpp, au pire. Au mieux, qmake refusera d'analyser le fichier, car il contient des spécifications contradictoires.

j'ai utilisé le modèle SUBDIRS quelques fois, et cela fonctionne bien si vous pouvez construire des parties dans des bibliothèques plus ou moins indépendantes, apparemment comme vous l'avez avec la logique et l'interface graphique séparée. Voici une façon de le faire:

project_dir/
-project.pro
-common.pri
-logic/
----logic.pro
----some logic files
-gui/
----gui.pro
----gui files
-build/
----build.pro
----main.cpp
Projet

.pro:

TEMPLATE = subdirs
SUBDIRS = logic \
          gui

# build must be last:
CONFIG += ordered
SUBDIRS += build

commun.pri:

#Includes common configuration for all subdirectory .pro files.
INCLUDEPATH += . ..
WARNINGS += -Wall

TEMPLATE = lib

# The following keeps the generated files at least somewhat separate 
# from the source files.
UI_DIR = uics
MOC_DIR = mocs
OBJECTS_DIR = objs

logique/logique.pro:

# Check if the config file exists
! include( ../common.pri ) {
    error( "Couldn't find the common.pri file!" )
}

HEADERS += logic.h
SOURCES += logic.cpp

# By default, TARGET is the same as the directory, so it will make 
# liblogic.a (in linux).  Uncomment to override.
# TARGET = target

/l'interface utilisateur graphique gui.pro:

! include( ../common.pri ) {
    error( "Couldn't find the common.pri file!" )
}

FORMS += gui.ui
HEADERS += gui.h
SOURCES += gui.cpp

# By default, TARGET is the same as the directory, so it will make 
# libgui.a (in linux).  Uncomment to override.
# TARGET = target

build / build.pro:

TEMPLATE = app

SOURCES += main.cpp

LIBS += -L../logic -L../gui -llogic -lgui

# Will build the final executable in the main project directory.
TARGET = ../project
81
répondu Caleb Huitt - cjhuitt 2017-05-23 13:29:50
la source

vous utilisez subdirs si les dossiers logic et gui représentent réellement une sorte de cible, par exemple. une bibliothèque, qui peut être construit indépendamment de toute autre chose. Si c'est le cas, alors il suffit d'utiliser

TEMPLATE = lib
TARGET = logic
CONFIG += dll

dans la logique.pro.

si ce ne sont pas des cibles indépendantes, mais juste des dossiers qui existent pour organiser les fichiers sources, alors vous pouvez simplement utiliser un .IDP fichier dans chaque à la place et les inclure dans le .

include(logic/logic.pri)
include(gui/gui.pri)

il suffit de se rappeler que les chemins de fichier dans le .pri fichiers sont relatifs à l' .fichier pro et pas .pri. BTW, l'utilisation d'un .le fichier pri est optionnel car vous pouvez toujours lister les fichiers de ces dossiers directement dans le .pro file. Le. le fichier pri rend juste ce peu plus net et aide à garder le .pro file shorter.

16
répondu Troubadour 2009-09-13 18:02:18
la source

Autres questions sur