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
,也是按照顺序构建的,猜测可能是版本的原因~~~
运行结果如下: