以下内用转自
https://www.devbean.net/2012/01/a-qt-pro-design-method/
Qt 框架内置了插件机制,这给我们的模块化设计提供了一种思路,就是利用 Qt 的插件机制来实现模块化设计。例如,我们可以将主程序、GUI、业务逻辑做成三个模块——所谓模块,我们可以从表现形式上理解成就是一个 .dll 文件。本文所要阐述的重点,就是如何针对这种设计编写 .pro 文件。
假设我们的项目文件结构如下所示:
1
2
3
4
5
6
7
8
9
|
project_dir
/
--
project
.
pro
--
main
.
cpp
--
logic
/
--
--
logic
.
pro
--
--
some
logic
files
--
gui
/
--
--
gui
.
pro
--
--
gui
files
|
显而易见,我们应该将 .pro 文件的 TEMPLATE 设置为 subdirs,而 SUBDIRS 则是 gui、logic 两个目录。但是,将 TEMPLATE 设置为 subdirs 有一个问题:会将各个 .pro 文件的 TEMPLPATE 或者 TARGET 变量设置得很乱。SUBDIRS 最适合于仅仅指定子目录,因此,不建议在 TEMPLATE = SUBDIRS 的 .pro 文件中同时设置 SOURCES 变量。
我们重新调整下目录结构:
1
2
3
4
5
6
7
8
9
10
11
12
|
project_dir
/
--
project
.
pro
--
common
.
pri
--
logic
/
--
--
logic
.
pro
--
--
some
logic
files
--
gui
/
--
--
gui
.
pro
--
--
gui
files
--
build
/
--
--
build
.
pro
--
--
main
.
cpp
|
project.pro 中的内容为:
1
2
3
4
5
6
7
|
TEMPLATE
=
subdirs
SUBDIRS
=
logic
\
gui
# build 必须在最后一个
CONFIG
+=
ordered
SUBDIRS
+=
build
|
common.pri 中的内容为:
1
2
3
4
5
6
7
8
9
|
# 通用设置,用于子目录 .pri 文件的引入
INCLUDEPATH
+=
.
.
.
WARNINGS
+=
-
Wall
TEMPLATE
=
lib
UI_DIR
=
uics
MOC_DIR
=
mocs
OBJECTS_DIR
=
objs
|
logic/logic.pro 中的内容为:
1
2
3
4
5
6
|
!
include
(
.
.
/
common
.
pri
)
{
error
(
Couldn'
t
find
the
common
.
pri
file
!
)
}
HEADERS
+=
logic
.
h
SOURCES
+=
logic
.
cpp
|
gui/gui.pro 中的内容为:
1
2
3
4
5
6
7
|
!
include
(
.
.
/
common
.
pri
)
{
error
(
Couldn'
t
find
the
common
.
pri
file
!
)
}
FORMS
+=
gui
.
ui
HEADERS
+=
gui
.
h
SOURCES
+=
gui
.
cpp
|
build/build.pro 中的内容为:
1
2
3
4
5
6
7
8
|
TEMPLATE
=
app
SOURCES
+=
main
.
cpp
LIBS
+=
-
L
.
.
/
logic
-
L
.
.
/
gui
-
llogic
-
lgui
# 设置生成的主应用程序文件的目录
TARGET
=
.
.
/
project
|
此时,我们直接编译 project.pro 项目文件,就可以得到一个分开编译好的程序文件。
这里仅提供一种设计思路,供大家思考。本文思路出自 http://stackoverflow.com/questions/1417776/how-to-use-qmakes-subdirs-template