以下内用转自
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 . cppproject.pro 中的内容为:
1 2 3 4 5 6 7 TEMPLATE = subdirs SUBDIRS = logic \ gui # build 必须在最后一个 CONFIG += ordered SUBDIRS += buildcommon.pri 中的内容为:
1 2 3 4 5 6 7 8 9 # 通用设置,用于子目录 .pri 文件的引入 INCLUDEPATH += . . . WARNINGS += - Wall TEMPLATE = lib UI_DIR = uics MOC_DIR = mocs OBJECTS_DIR = objslogic/logic.pro 中的内容为:
1 2 3 4 5 6 ! include ( . . / common . pri ) { error ( Couldn' t find the common . pri file ! ) } HEADERS += logic . h SOURCES += logic . cppgui/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 . cppbuild/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