我开始学习Qt。我正在从Visual Studio世界转移,我正在寻找一种使用QMake组织项目结构的方法。我找到了'子目标'模板,但我很难理解它。

我的项目结构如下:

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

我的 project.pro 看起来像这样

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

在子目录的 .pro 文件中,我有适当的 SOURCES HEADERS RESOURCES 变量集。

请告诉我 TARGET TEMPLATE 以及我应在 .pro 文件中设置的其他必要值。

另外,除了官方的教程之外还有一些不错的QMake教程吗?

有帮助吗?

解决方案

除了 Troubadour的评论之外,我还会注意到 SUBDIRS 目标仅适用于指定子目录。

SOURCES += main.cpp
你的project.pro文件中的

是不正确的,并且最坏的情况下可能无法构建你的main.cpp文件。充其量,qmake将拒绝解析该文件,因为它中的规范存在冲突。

我已经使用了 SUBDIRS 模板几次,如果你可以将部件构建到或多或少的独立库中,它会很好,显然就像你有逻辑和gui一样。这是一种方法:

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.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.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

其他提示

如果逻辑和gui文件夹实际上重复某种目标,则使用 subdirs ,例如。一个图书馆,可以独立于其他任何东西建造。如果是这种情况,那么只需使用

TEMPLATE = lib
TARGET = logic
CONFIG += dll

在logic.pro。

如果它们不是独立目标,而只是存在用于组织源文件的文件夹,那么您可以在每个文件中使用.pri文件,并使用

将它们包含在.pro中。
include(logic/logic.pri)
include(gui/gui.pri)

请记住.pri文件中的文件路径是相对于.pro文件而不是 .pri。顺便说一句,使用.pri文件是可选的,因为您仍然可以直接在.pro文件中列出这些文件夹中的文件。 .pri文件只是让它更整洁,有助于缩短.pro文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top