Frage

Ich fange Qt zu lernen. Ich bin aus der Visual Studio Welt bewegen, und ich bin auf der Suche nach einer Möglichkeit, meine Projektstruktur mit QMake zu organisieren. Ich habe die ‚subdirs‘ Vorlage gefunden, aber ich habe ziemlich schwer, es zu verstehen.

Meine Projektstruktur sieht folgendermaßen aus:

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

Mein project.pro sieht wie folgt aus

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

In den .pro Dateien für die Unterverzeichnisse I entsprechend haben Quellen HEADERS und RESOURCES Variablen gesetzt.

Bitte sagen Sie mir, was TARGET TEMPLATE und andere notwendige Werte, die ich in den .pro Dateien setzen soll.

Außerdem gibt es einige gute QMake Tutorial andere als die offizielle?

War es hilfreich?

Lösung

Neben Troubadour Kommentar , würde ich beachten dass das SUBDIRS Ziel ist für die Angabe Verzeichnisse nur gut. Daher Ihre zusätzliche Zeile von

SOURCES += main.cpp

in Ihrer project.pro Datei falsch ist, und wird wahrscheinlich nicht Ihre main.cpp-Datei erstellen, im schlimmsten Fall. Am besten, qmake wird sich weigern, die Datei zu analysieren, da es widersprüchliche Angaben in ihm hat.

Ich habe die SUBDIRS Vorlage ein paar Mal verwendet, und es tut gut, wenn Sie Teile in mehr oder weniger unabhängige Bibliotheken aufbauen können, scheinbar wie haben Sie mit der Logik und der gui getrennt. Hier ist eine Möglichkeit, dies zu tun:

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

Logik / 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

Andere Tipps

Sie verwenden subdirs, wenn die Logik und GUI-Ordner tatsächlich eine Art von Ziel repesent, zum Beispiel. eine Bibliothek, die unabhängig von irgendetwas anderes gebaut werden kann. Wenn das der Fall ist, dann benutzen Sie einfach

TEMPLATE = lib
TARGET = logic
CONFIG += dll

in logic.pro.

Wenn sie nicht unabhängig Ziele sind, sondern nur Ordner, die die Quellen-Dateien zu organisieren existieren, dann können Sie nur eine PRI-Datei in jedem stattdessen verwenden und schließen sie innerhalb der .pro mit

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

Bitte beachten Sie, dass die Dateipfade in den PRI-Dateien sind relativ zur .proDatei und nicht der .pri. BTW, ist die Verwendung einer PRI-Datei ist optional, da Sie immer noch die Dateien in diesen Ordnern direkt in der .pro-Datei auflisten können. Die PRI-Datei es nur macht das sauberere Bit und hilft, die .proDatei kürzer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top