0. 环境
Qt5.3.2 mingw482_32
1. 创建子项目
这个子项目类似于Visual Studio中解决方案一样的存在,用于管理多个其他子项目。点击文件->新建文件或项目->其他项目->子项目项目->Choose:

之后下一步,选择需要的编译器,我这里只有mingw,若有msvc编译器也可选择msvc,不同的编译器生成的静态库文件后缀名不一样,mingw后缀为.a,msvc后缀为.lib。
2. 创建SubProjectSln的子项目
- UiApp
- Dll
- Lib
在SubProjectSln项目上新建子项目,操作如下,其他类同:

创建完成后项目目录结构如下:

其中SubProjectSln的项目文件内容如下:
1 TEMPLATE = subdirs
2
3 SUBDIRS += \
4 UiApp \
5 Dll \
6 Lib
这里最主要的就是这个项目文件
TEMPLATE不为subdirs则SubProjectSln就不能创建子项目SUBDIRS的项目顺序默认就是构建的顺序。
3. 三个项目内容
Dll依赖 Lib,UiApp依赖Dll
3.1 Dll
Dll主要内容如下:
1 #include "dll.h"
2 #include "../lib/lib.h"
3
4 Dll::Dll()
5 {
6
7 }
8
9 QString Dll::getDllName()
10 {
11 return "Dll";
12 }
13
14 QString Dll::getLibName()
15 {
16 Lib lib;
17 return lib.getName();
18 }
Dll项目文件如下:
1 #-------------------------------------------------
2 #
3 # Project created by QtCreator 2022-08-28T16:51:01
4 #
5 #-------------------------------------------------
6
7 QT -= gui
8
9 TARGET = Dll
10 TEMPLATE = lib
11
12 DEFINES += DLL_LIBRARY
13
14 CONFIG(debug,debug|release){
15 DESTDIR = ../bin/debug
16 LIBS += ../bin/debug/libLib.a
17 } else {
18 DESTDIR = ../bin/release
19 LIBS += ../bin/release/libLib.a
20 }
21
22 SOURCES += dll.cpp
23
24 HEADERS += dll.h\
25 dll_global.h
26
27 unix {
28 target.path = /usr/lib
29 INSTALLS += target
30 }
3.2 Lib
Lib主要内容如下:
1 #include "lib.h"
2
3
4 Lib::Lib()
5 {
6 }
7
8 QString Lib::getName()
9 {
10 return "Lib";
11 }
Lib项目文件内容如下:
1 #-------------------------------------------------
2 #
3 # Project created by QtCreator 2022-08-28T16:51:22
4 #
5 #-------------------------------------------------
6
7 QT -= gui
8
9 TARGET = Lib
10 TEMPLATE = lib
11 CONFIG += staticlib
12
13 CONFIG(debug,debug|release){
14 DESTDIR = ../bin/debug
15 } else {
16 DESTDIR = ../bin/release
17 }
18
19 SOURCES += lib.cpp
20
21 HEADERS += lib.h
22 unix {
23 target.path = /usr/lib
24 INSTALLS += target
25 }
3.3 UiApp
UiApp界面如下:

UiApp界面代码如下:
1 #include "widget.h"
2 #include "ui_widget.h"
3 #include "../Dll/dll.h"
4
5 Widget::Widget(QWidget *parent) :
6 QWidget(parent),
7 ui(new Ui::Widget)
8 {
9 Dll dll;
10 ui->setupUi(this);
11 ui->dllLabel->setText(dll.getDllName());
12 ui->libLabel->setText(dll.getLibName());
13 }
14
15 Widget::~Widget()
16 {
17 delete ui;
18 }
UiApp项目文件如下:
1 #-------------------------------------------------
2 #
3 # Project created by QtCreator 2022-08-28T16:50:24
4 #
5 #-------------------------------------------------
6
7 QT += core gui
8
9 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
10
11 TARGET = UiApp
12 TEMPLATE = app
13
14 CONFIG(debug,debug|release){
15 DESTDIR = ../bin/debug
16 LIBS += ../bin/debug/Dll.dll
17 } else {
18 DESTDIR = ../bin/release
19 LIBS += ../bin/release/Dll.dll
20 }
21
22
23 SOURCES += main.cpp\
24 widget.cpp
25
26 HEADERS += widget.h
27
28 FORMS += widget.ui
4. 构建
以如下顺序构建:

这里的错误就是因为UiApp依赖了Dll,所以构建的顺序颠倒了。
修改SubProjectSln项目文件如下:
1 TEMPLATE = subdirs
2
3 SUBDIRS += \
4 Lib \
5 Dll \
6 UiApp
即可构建成功。
我网上查资料有的说要在SubProjectSln项目文件中加CONFIG += ordered,使SUBDIRS按照顺序构建,但是我测试下来不加CONFIG += ordered,也是按照顺序构建的,猜测可能是版本的原因~~~
运行结果如下:

浙公网安备 33010602011771号