QtCreator按顺序编译多个子项目
- 0. 环境
- 1. 创建子项目
- 2. 创建SubProjectSln的子项目
- 3. 三个项目内容
-
- 3.1 Dll
- 3.2 Lib
- 3.3 UiApp
- 4. 构建
0. 环境
Qt5.3.2 mingw482_32
Visual Studio
中解决方案一样的存在,用于管理多个其他子项目。点击文件
->新建文件或项目
->其他项目
->子项目项目
->Choose
:文章图片
之后
下一步
,选择需要的编译器,我这里只有mingw
,若有msvc
编译器也可选择msvc
,不同的编译器生成的静态库文件后缀名不一样,mingw
后缀为.a
,msvc
后缀为.lib
。2. 创建SubProjectSln的子项目
UiApp
Dll
Lib
SubProjectSln
项目上新建子项目,操作如下,其他类同:文章图片
创建完成后项目目录结构如下:
文章图片
其中
SubProjectSln
的项目文件内容如下:TEMPLATE = subdirsSUBDIRS += \
UiApp \
Dll \
Lib
这里最主要的就是这个项目文件
TEMPLATE
不为subdirs
则SubProjectSln
就不能创建子项目SUBDIRS
的项目顺序默认就是构建的顺序。
Dll
依赖 Lib
,UiApp
依赖Dll
3.1 Dll
Dll
主要内容如下:#include "dll.h"
#include "../lib/lib.h"Dll::Dll()
{}QString Dll::getDllName()
{
return "Dll";
}QString Dll::getLibName()
{
Lib lib;
return lib.getName();
}
Dll
项目文件如下:#-------------------------------------------------
#
# Project created by QtCreator 2022-08-28T16:51:01
#
#-------------------------------------------------QT-= guiTARGET = Dll
TEMPLATE = libDEFINES += DLL_LIBRARYCONFIG(debug,debug|release){
DESTDIR = ../bin/debug
LIBS += ../bin/debug/libLib.a
} else {
DESTDIR = ../bin/release
LIBS += ../bin/release/libLib.a
}SOURCES += dll.cppHEADERS += dll.h\
dll_global.hunix {
target.path = /usr/lib
INSTALLS += target
}
3.2 Lib
Lib
主要内容如下:#include "lib.h"Lib::Lib()
{
}QString Lib::getName()
{
return "Lib";
}
Lib
项目文件内容如下:#-------------------------------------------------
#
# Project created by QtCreator 2022-08-28T16:51:22
#
#-------------------------------------------------QT-= guiTARGET = Lib
TEMPLATE = lib
CONFIG += staticlibCONFIG(debug,debug|release){
DESTDIR = ../bin/debug
} else {
DESTDIR = ../bin/release
}SOURCES += lib.cppHEADERS += lib.h
unix {
target.path = /usr/lib
INSTALLS += target
}
3.3 UiApp
UiApp
界面如下:文章图片
UiApp
界面代码如下:#include "widget.h"
#include "ui_widget.h"
#include "../Dll/dll.h"Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
Dll dll;
ui->setupUi(this);
ui->dllLabel->setText(dll.getDllName());
ui->libLabel->setText(dll.getLibName());
}Widget::~Widget()
{
delete ui;
}
UiApp
项目文件如下:#-------------------------------------------------
#
# Project created by QtCreator 2022-08-28T16:50:24
#
#-------------------------------------------------QT+= core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = UiApp
TEMPLATE = appCONFIG(debug,debug|release){
DESTDIR = ../bin/debug
LIBS += ../bin/debug/Dll.dll
} else {
DESTDIR = ../bin/release
LIBS += ../bin/release/Dll.dll
}SOURCES += main.cpp\
widget.cppHEADERS+= widget.hFORMS+= widget.ui
4. 构建 以如下顺序构建:
文章图片
这里的错误就是因为
UiApp
依赖了Dll
,所以构建的顺序颠倒了。修改
SubProjectSln
项目文件如下:TEMPLATE = subdirsSUBDIRS += \
Lib \
Dll \
UiApp
即可构建成功。
我网上查资料有的说要在
SubProjectSln
项目文件中加CONFIG += ordered
,使SUBDIRS
按照顺序构建,但是我测试下来不加CONFIG += ordered
,也是按照顺序构建的,猜测可能是版本的原因~~~【QT|QtCreator按顺序编译多个子项目】运行结果如下:
文章图片
推荐阅读
- Qt|QComboBox文字居中的几种实现方式
- QT笔记|Qt实现最小化窗口到托盘图标
- c++数据结构与算法|c++类实例化的两种方式
- QT|QT利用 QFile, QTextStream写入、读取文件时的换行问题
- IC读写器|Python Qt UI设计
- C++|OpenCV 离散傅里叶变换在图像处理中的应用学习笔记
- windows|嵌入式培训经验分享——进程之间的通讯(常用)
- 双目校正|双目立体校正C/C++复现
- 历史上的今天|【历史上的今天】8 月 24 日(Windows 95 问世;乔布斯辞任苹果 CEO;库克上台)