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
,也是按照顺序构建的,猜测可能是版本的原因~~~
运行结果如下:
标签:bin,..,Lib,Creator,Dll,子项目,lib,debug,Qt From: https://www.cnblogs.com/ybqjymy/p/17428378.html