首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用QMake的子目录模板?

如何使用QMake的子目录模板?
EN

Stack Overflow用户
提问于 2009-09-13 13:43:33
回答 2查看 58.9K关注 0票数 67

我开始学习Qt了。我离开了Visual Studio世界,正在寻找一种使用QMake来组织我的项目结构的方法。我找到了“subdirs”模板,但我很难理解它。

我的项目结构如下所示:

代码语言:javascript
运行
复制
project_dir/
    main.cpp
    project.pro
    logic/
      logic.pro
      some logic files
    gui/
      gui.pro
      gui files

我的project.pro看起来像这样

代码语言:javascript
运行
复制
TEMPLATE = subdirs
SUBDIRS = logic \
          gui
SOURCES += main.cpp

在子目录的.pro文件中,我设置了适当的源、头文件和资源变量。

请告诉我应该在.pro文件中设置什么目标、模板和其他必要的值。

另外,除了官方的QMake教程之外,还有什么好的教程吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-13 14:21:11

除了Troubadour's comment之外,我还要注意到SUBDIRS目标只适用于指定子目录。因此,您的额外行

代码语言:javascript
运行
复制
SOURCES += main.cpp

在您的project.pro文件中是不正确的,并且在最坏的情况下很可能无法构建您的main.cpp文件。在最好的情况下,qmake将拒绝解析该文件,因为它包含冲突的规范。

我已经用过SUBDIRS模板几次了,如果你能把各个部分构建到或多或少独立的库中,它就能做得很好,就像你把逻辑和gui分开一样。以下是一种方法:

代码语言:javascript
运行
复制
project_dir/
-project.pro
-common.pri
-logic/
----logic.pro
----some logic files
-gui/
----gui.pro
----gui files
-build/
----build.pro
----main.cpp

project.pro:

代码语言:javascript
运行
复制
TEMPLATE = subdirs
SUBDIRS = logic \
          gui

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

common.pri:

代码语言:javascript
运行
复制
#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:

代码语言:javascript
运行
复制
# 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:

代码语言:javascript
运行
复制
! 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:

代码语言:javascript
运行
复制
TEMPLATE = app

SOURCES += main.cpp

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

# Will build the final executable in the main project directory.
TARGET = ../project
票数 87
EN

Stack Overflow用户

发布于 2009-09-13 13:53:52

如果逻辑和图形用户界面文件夹实际上返回了某种类型的目标,则可以使用subdirs。一个库,可以独立于其他任何东西构建。如果是这样,那么只需使用

代码语言:javascript
运行
复制
TEMPLATE = lib
TARGET = logic
CONFIG += dll

在logic.pro中。

如果它们不是独立的目标,而只是用来组织源文件的文件夹,那么您可以在每个文件夹中使用一个.pri文件,并使用以下命令将它们包含在.pro中

代码语言:javascript
运行
复制
include(logic/logic.pri)
include(gui/gui.pri)

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

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1417776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档