当前位置: 首页 > 网络知识

Qt Creator按顺序编译多个子项目

时间:2026-01-26 14:19:51

0. 环境

Qt5.3.2 mingw482_32

1. 创建子项目

这个子项目类似于Visual Studio中解决方案一样的存在,用于管理多个其他子项目。点击文件>新建文件或项目>其他项目>子项目项目>Choose

之后下一步,选择需要的编译器,我这里只有mingw,若有msvc编译器也可选择msvc,不同的编译器生成的静态库文件后缀名不一样,mingw后缀为.a,msvc后缀为.lib。

2. 创建SubProjectSln的子项目

  1. UiApp
  2. Dll
  3. Lib

在SubProjectSln项目上新建子项目,操作如下,其他类同:

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

其中SubProjectSln的项目文件内容如下:

1 TEMPLATE = subdirs 2 3 SUBDIRS += \ 4 UiApp \ 5 Dll \ 6 Lib

这里最主要的就是这个项目文件

3. 三个项目内容

Dll依赖LibUiApp依赖Dll

3.1 Dll

Dll主要内容如下:

1 #include "dll.h" 2 #include "../lib/lib.h" 3 4 Dll::Dll() 5 8 9 QString Dll::getDllName() 10 13 14 QString Dll::getLibName() 15

Dll项目文件如下:

1 # 2 # 3 # Project created by QtCreator 20220828T16: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) else 21 22 SOURCES += dllpp 23 24 HEADERS += dll.h\ 25 dll_global.h 26 27 unix

3.2 Lib

Lib主要内容如下:

1 #include "lib.h" 2 3 4 Lib::Lib() 5 7 8 QString Lib::getName() 9

Lib项目文件内容如下:

1 # 2 # 3 # Project created by QtCreator 20220828T16:51:22 4 # 5 # 6 7 QT = gui 8 9 TARGET = Lib 10 TEMPLATE = lib 11 CONFIG += staticlib 12 13 CONFIG(debug,debug|release) else 18 19 SOURCES += libpp 20 21 HEADERS += lib.h 22 unix

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 14 15 Widget::~Widget() 16

UiApp项目文件如下:

1 # 2 # 3 # Project created by QtCreator 20220828T16: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) else 21 22 23 SOURCES += mainpp\ 24 widgetpp 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,也是按照顺序构建的,猜测可能是版本的原因~~~

运行结果如下:



上一篇:OpenSeadragon 实战系列基础篇
下一篇:C++“不能实例化抽象类”错误
Qt
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素