Qt 框架内置了插件机制,这给我们的模块化设计提供了一种思路,就是利用 Qt 的插件机制来实现模块化设计。例如,我们可以将主程序、GUI、业务逻辑做成三个模块——所谓模块,我们可以从表现形式上理解成就是一个 .dll 文件。本文所要阐述的重点,就是如何针对这种设计编写 .pro 文件。
假设我们的项目文件结构如下所示:
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 变量。
我们重新调整下目录结构:
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 必须在最后一个 CONFIG += ordered SUBDIRS += build
common.pri 中的内容为:
# 通用设置,用于子目录 .pri 文件的引入 INCLUDEPATH += . .. WARNINGS += -Wall TEMPLATE = lib UI_DIR = uics MOC_DIR = mocs OBJECTS_DIR = objs
logic/logic.pro 中的内容为:
!include( ../common.pri ) { error( Couldn't find the common.pri file! ) } HEADERS += logic.h SOURCES += logic.cpp
gui/gui.pro 中的内容为:
!include( ../common.pri ) { error( Couldn't find the common.pri file! ) } FORMS += gui.ui HEADERS += gui.h SOURCES += gui.cpp
build/build.pro 中的内容为:
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。