Question

Je commence à apprendre le 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 du mal à le comprendre.

La structure de mon 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, les variables SOURCES , HEADERS et RESSOURCES appropriées sont définies.

Dites-moi ce que CIBLE , MODÈLE et les autres valeurs nécessaires doivent être définis dans les fichiers .pro .

De plus, existe-t-il un bon didacticiel QMake autre que le didacticiel officiel?

Était-ce utile?

La solution

En plus du commentaire de Troubadour , je voudrais noter que la cible SUBDIRS n'est utile que pour spécifier des sous-répertoires. Par conséquent, votre ligne supplémentaire de

SOURCES += main.cpp

dans votre fichier project.pro est incorrect et, dans le pire des cas, la création de votre fichier main.cpp échouera. Au mieux, qmake refusera d'analyser le fichier car il contient des spécifications en conflit.

J'ai utilisé le modèle SUBDIRS à quelques reprises, et cela fonctionne bien si vous pouvez créer des parties dans des bibliothèques plus ou moins indépendantes, comme si vous l'aviez avec la logique et l'interface graphique distincte. . Voici un moyen 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

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

Autres conseils

Vous utilisez sous-répertoires si les dossiers de logique et d'interface graphique représentent en réalité 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 simplement des dossiers pour organiser les fichiers sources, vous pouvez simplement utiliser un fichier .pri dans chacun d'eux et les inclure dans le fichier .pro à l'aide de

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

Rappelez-vous simplement que les chemins de fichier dans les fichiers .pri sont relatifs au fichier .pro et pas au fichier .pri. En passant, l'utilisation d'un fichier .pri est facultative, car vous pouvez toujours répertorier les fichiers de ces dossiers directement dans le fichier .pro. Le fichier .pri le rend plus simple et permet de raccourcir le fichier .pro.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top