Je commence à apprendre Qt. Je quitte le monde de Visual Studio et je cherche un moyen d'organiser la structure de mon projet à l'aide de QMake. J'ai trouvé le modèle "subdirs" mais j'ai beaucoup de mal à le 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 project.pro ressemble à ceci
TEMPLATE = subdirs
SUBDIRS = logic \
gui
SOURCES += main.cpp
Dans les fichiers . Pro des sous-répertoires, j'ai les sources APPROPRIÉES , EN-TÊTES et RESSOURCES ensemble de variables.
Veuillez me dire ce que CIBLE , MODÈLE et autres valeurs nécessaires que je devrais définir dans le . pro fichiers.
En outre, existe-t-il un bon tutoriel QMake autre que le tutoriel officiel?
En plus de Commentaire de Troubadour , je noterais que la cible SUBDIRS
est seulement bonne pour spécifier des sous-répertoires. Par conséquent, votre gamme supplémentaire de
SOURCES += main.cpp
dans votre fichier project.pro est incorrect et, au pire, échouera probablement à construire votre fichier main.cpp. Au mieux, qmake refusera d'analyser le fichier, car il contient des spécifications contradictoires.
J'ai utilisé le modèle SUBDIRS
plusieurs 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 fait avec la logique et l'interface graphique séparées. Voici une façon de procéder:
project_dir/
-project.pro
-common.pri
-logic/
----logic.pro
----some logic files
-gui/
----gui.pro
----gui files
-build/
----build.pro
----main.cpp
project.pro:
TEMPLATE = subdirs
SUBDIRS = logic \
gui
# build must be last:
CONFIG += ordered
SUBDIRS += build
common.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
logic/logic.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
gui/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
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 construite indépendamment de toute autre chose. Si tel est le cas, utilisez simplement
TEMPLATE = lib
TARGET = logic
CONFIG += dll
dans logic.pro.
S'ils ne sont pas des cibles indépendantes mais ne sont que des dossiers qui existent pour organiser les fichiers sources, vous pouvez simplement utiliser un fichier .pri dans chacun à la place et les inclure dans le .pro en utilisant
include(logic/logic.pri)
include(gui/gui.pri)
N'oubliez pas que les chemins d'accès aux fichiers dans les fichiers .pri sont relatifs au fichier .pro et pas le .pri. BTW, l'utilisation d'un fichier .pri est facultative car vous pouvez toujours lister les fichiers dans ces dossiers directement dans le fichier .pro. Le fichier .pri le rend plus net et permet de raccourcir le fichier .pro.