windows下Qt5自动编译配置QtMqtt环境(11)
文章目录
- @[toc]
- 1、概述
- 2、准备
- 1.1 下载源码
- 1.2 配置环境
- 1.3 解释原理
- 3、编译
- 4、验证
- 5、参考
- 6、视频
文章目录
- @[toc]
- 1、概述
- 2、准备
- 1.1 下载源码
- 1.2 配置环境
- 1.3 解释原理
- 3、编译
- 4、验证
- 5、参考
- 6、视频
| 更多精彩内容 |
|---|
| 👉内容导航 👈 |
| 👉Qt网络编程 👈 |
1、概述
Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配置;
网络所有的QtMqtt配置的文章都是编译完成手动复制,非常麻烦,对新手也非常不友好吗,容易漏了一些步骤;
本文中主要说明windows下如何自动编译配置QtMqtt,无需手动拷贝、生成帮助手册;
注意:
- 编译前需要安装
perl,如果没有perl则编译后生成的头文件都是带.h后缀的。- 工程里面需要有一个
.git文件夹,否则不会指向perl。- 如果不安装perl也可以编译,不过后续会出现部分报错,需要手动添加头文件。
- 只是Qt5需要安装perl,Qt6不需要。
演示环境:
| 环境 | 版本 |
|---|---|
| 系统 | windows11 |
| Qt | 5.14.2 |
| QtMqtt | 5.14.2 |
| 编译器 | mingw73_64、msvc2017_64 |
2、准备
1.1 下载源码
- 命令行下载源码:下载完成后选择QtMqtt版本,与Qt版本相同或者相近;
git clone https://github.com/qt/qtmqtt.git
git clone http://code.qt.io/qt/qtmqtt.git
git clone https://code.qt.io/qt/qtmqtt.gitgit tag # 查看分支
git checkout 5.14.2 # 切换分支
- 浏览器下载源码:

1.2 配置环境
windows安装perl有几种方式,可以任意选择一种安装。
方法1:
- qt-opensource-windows-x86-5.14.2.exe离线安装包中内置了perl,不过需要在安装时勾选,安装完成Qt后再手动安装;
- 如下图所示,离线安装时勾选
Strawberry Perl;

- 安装完成后进入安装路径下
D:\Qt\Qt5.14.2\Tools\Perl52213_32,就可以看见perl安装包了,然后运行perl安装包进行安装就可以。
方法2:
- 进入perl官网或者github下载;
- Perl Download - www.perl.org
- Releases · StrawberryPerl/Perl-Dist-Strawberry
- 其中的strawberry 为开源免费版本;
- 提供了zip压缩包版本和msi安装程序版本;
- 不过体积都比较大,这里下载一个轻便版本的strawberry-perl-5.40.0.1-64bit-portable.zip
- 解压后如下图所示;

- 然后打开环境变量,点击
path,添加perl/bin文件夹路径到环境变量;

- 保存关闭后,打开cmd窗口,检查perl是否生效;

1.3 解释原理
- Qt编译QtMqtt模块可以使用perl也可以不使用,使用perl在这里主要是为了生成不带.h后缀的头文件,并且自动拷贝头文件到Qt安装路径下;
- 如果不安装perl就需要手动拷贝QtMqtt头文件,并且在后续使用QtMqtt过程中只能使用带.h后缀的头文件,例如:
#include <qmqttclient.h> // 正常
#include <QMqttClient> // 报错
- 不安装perl的编译方式;
- 然后我们打开
src/mqtt/mqtt.pro文件,在文件最下面有一行load(qt_module)代码,这行代码就是用来构建模块的;

- 进入qt_module.prf文件后,有一行
load(qt_build_paths)代码;

- 再进入qt_build_paths.prf 文件,可以看出文件中会判断构建的源码工程下是否有
.git文件夹,如果存在.git文件夹就会执行CONFIG += git_build配置;

- 而
git_build配置位于qt_module_headers.prf文件中,如下图所示,git_build就是调用perl syncqt.pl脚本的配置;

- 所以,默认情况下QtMqtt源码文件夹下必须有一个**.git** 文件夹,否则不会调用perl

- 使用
git clone下载的源码都带有.git文件夹,如果是直接在浏览器下载的就没有,这里有两个解决办法;- 在源码文件夹下创建一个.git文件夹;
- 将qt_build_paths.prf文件中21行注释掉。

3、编译
- 将qtmqtt.pro 文件使用qtcreator打开,然后选择编译器,在设置完编译器之后就会自动在build文件夹下生成头文件;(如果perl升序就不会生成头文件)


- 如下图所示会显示执行perl的日志信息。

-
添加编译配置;
- 选择【项目】【构建】【添加构建步骤】【make】;

- 第一个:在make参数项添加
docs,用于生成帮助手册;(只需要执行一次) - 第二个:在make参数项添加
install_docs,用于自动安装帮助手册;(只需要执行一次) - 第三个:在make参数项添加
install,用于自动安装编译好的qtmqtt; - 注意: 由于帮助手册是安装到公共路径,而其它头文件、动态库是安装到编译器路径下,所以如果给多个编译器配置时docs、install_docs只需要配置一次,而install每个编译器都需要配置。

- 编译报错:是因为使用mingw32-make.exe install安装报错如下所示,这是因为QtMqtt源码放的位置不对;
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -install qinstall E:\test\qtmqtt\build\MinGW730_64-Debug\include\QtMqtt\qtmqttversion.h D:\Qt\Qt5.14.2\5.14.2\mingw73_64\include\QtMqtt\qtmqttversion.h
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -install qinstall E:\test\qtmqtt\build\MinGW730_64-Debug\include\QtMqtt\QtMqttVersion D:\Qt\Qt5.14.2\5.14.2\mingw73_64\include\QtMqtt\QtMqttVersion
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -install qinstall E:\test\qtmqtt\build\MinGW730_64-Debug\include\QtMqtt\QtMqtt D:\Qt\Qt5.14.2\5.14.2\mingw73_64\include\QtMqtt\QtMqtt
mingw32-make[3]: Leaving directory 'E:/test/qtmqtt/build/MinGW730_64-Debug/src/mqtt'
mingw32-make[2]: *** [Makefile:55: debug-install] Error 2
mingw32-make[2]: Leaving directory 'E:/test/qtmqtt/build/MinGW730_64-Debug/src/mqtt'
mingw32-make[1]: *** [Makefile:62: sub-mqtt-install_subtargets] Error 2
mingw32-make[1]: Leaving directory 'E:/test/qtmqtt/build/MinGW730_64-Debug/src'
mingw32-make: *** [Makefile:64: sub-src-install_subtargets] Error 2
15:13:40: 进程"D:\Qt\Qt5.14.2\Tools\mingw730_64\bin\mingw32-make.exe"退出,退出代码 2 。
Error while building/deploying project qtmqtt (kit: MinGW730-64)
When executing step "Make"
- 如下所示,将qtmqtt源码放到
D:\Qt\Qt5.14.2\5.14.2\Src路径下;名称影响。


- 然后使用点击构建,构建完成后就会自动将编译生成的所有文件安装到Qt路径下,这里使用mingw73_64编译器就会将编译生成的文件安装到下面路径了,不需要手动拷贝。
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\include\QtMqtt
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\Qt5Mqtt.dll
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\mkspecs\modules\qt_lib_mqtt.pri
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\mkspecs\modules\qt_lib_mqtt_private.pri
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\lib\libQt5Mqtt.a
D:\Qt\Qt5.14.2\Docs\Qt-5.14.2\qtmqtt.qch

4、验证
- 将qtmqtt\examples\mqtt路径下的示例工程复制 出来,使用qtcreator打开进行编译。
- 如果不复制到qtmqtt工程外,可能无法编译,错误如下所示,工程中文件呈现灰色。
Project ERROR: You cannot build examples inside the Qt source tree, except as part of a proper Qt build.

- 将示例程序复制 出来后就编译正常了。(如果没有使用perl,这里编译会显示找不到
#include <QMqttClient>文件)

- 编译成功后如下所示:

- 使用qtmqtt只需要在pro文件中添加
QT += mqtt就可以引入。

5、参考
- qt/qtmqtt.git - Qt Module to implement MQTT protocol version 3.1 and 3.1.1 http://mqtt.org/
- GitHub - qt/qtmqtt: Qt Module to implement MQTT protocol version 3.1 and 3.1.1 http://mqtt.org/
- Perl Download - www.perl.org
- Releases · StrawberryPerl/Perl-Dist-Strawberry
6、视频
windows下全网最详细、最简单的QtMqtt编译配置教程;
相关文章:
windows下Qt5自动编译配置QtMqtt环境(11)
文章目录 [toc]1、概述2、准备1.1 下载源码1.2 配置环境1.3 解释原理 3、编译4、验证5、参考6、视频 更多精彩内容👉内容导航 👈👉Qt网络编程 👈 1、概述 Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配…...
速盾:高防cdn有哪些冷知识?
高防CDN(Content Delivery Network)是一种用于提供高可靠性、高性能的互联网服务的技术。它通过将内容分发到离用户最近的服务器上,并优化网络流量,以提升网站的响应速度和承载能力。除了这些基本的了解,下面是一些高防…...
全面UI组件库Telerik 2024 Q4全新发布——官方宣布支持.NET 9
Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库,加快开发速度。Telerik DevCraft提供最完整的工具箱,用于构建现代和面向未来的业务应用程序,目前提供UI for ASP.NET MVC、Ken…...
电脑投屏到电脑:Windows,macOS及Linux系统可以相互投屏!
本篇其实是电脑远程投屏到另一台电脑的操作介绍。本篇文章的方法可用于Windows,macOS及Linux系统的相互投屏。 为了避免介绍过程中出现“这台电脑”投屏到“那台电脑”的混乱表述,假定当前屏幕投出端是Windows系统电脑,屏幕接收端是Linux系统…...
12.6深度学习_模型优化和迁移_模型移植
八、模型移植 1. 认识ONNX https://onnx.ai/ Open Neural Network Exchange(ONNX,开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。 ONNX的规范及代码主要由微软…...
Grid++Report:自定义模板设计(自由表格使用),详细教程
实现效果 步骤 一、新建空白 初始状态都是空白页,如果不是,点击右上角->文件->新建空白 二、页面设置 右击页面灰色部分->页面设置 根据需求自定义页面 三、报表头设计 1、新增报表头 右击屏幕->新增->报表节->报表头 点击报表头…...
[Collection与数据结构] 位图与布隆过滤器
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
idea中新建一个空项目
目的,为了在同一个目录下有多个小的项目:使用IDE为idea2022。 步骤: 点击新建项目,点击创建空项目,这里选择空项目是将其作为其他项目的一个容器,如图所示: 然后点击文件->项目结构…...
【Python】【Conda 】Conda 与 venv 虚拟环境优缺点全解:如何做出明智选择
目录 引言一、基本概念1.1 Conda 虚拟环境1.2 Python venv 虚拟环境 二、主要区别对比三、优缺点分析3.1 Conda 虚拟环境的优缺点3.2 Python venv 虚拟环境的优缺点 四、使用场景推荐4.1 使用 Conda 虚拟环境的场景4.2 使用 Python venv 虚拟环境的场景 五、虚拟环境管理工具对…...
深度学习在故障检测中的应用:从理论到实践
随着工业设备和信息系统的复杂性增加,故障检测成为企业运维的重要任务。然而,传统的基于规则或统计学的故障检测方法难以应对复杂多变的故障模式。深度学习作为一种强大的数据分析工具,为故障检测提供了新的解决思路。本文将介绍深度学习模型…...
自然语言处理与人工智能
自然语言处理(NLP)与人工智能(AI) 自然语言处理(NLP)是人工智能(AI)领域的一个重要分支,旨在使计算机能够理解、解释和生成自然语言。随着深度学习技术的进步࿰…...
量化交易系统开发-实时行情自动化交易-8.15.Ptrade/恒生平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于Ptrade/恒生平台介绍。 P…...
非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 4
三十三、出入库管理 Header.vue导一下,RecordController加一个 //将入库数据和原有数据相加吧//新增PostMapping("/save")public Result save(RequestBody Record record) {return recordService.save(record) ? Result.success() : Result.fail();} GoodsManage.v…...
基于MATLAB的信号处理工具:信号分析器
信号(或时间序列)是与特定时间相关的一系列数字或测量值,不同的行业和学科将这一与时间相关的数字序列称为信号或时间序列。生物医学或电气工程师会将其称为信号,而统计学家或金融定量分析师会使用时间序列这一术语。例如…...
Codeforces Round 784 (Div. 4)
题目链接 A. Division? 题意 思路 模拟即可 示例代码 void solve() {int n;cin >> n;int ans;if(n > 1900) ans 1;else if(n > 1600) ans 2;else if(n > 1400) ans 3;else ans 4;cout << "Division " << ans << \n;}B. T…...
OpenNebula 开源虚拟平台,对标 VMware
Beeks Group 主要为金融服务提供商提供虚拟专用服务器和裸机服务器。该公司表示,转向 OpenNebula 不仅大幅降低了成本,还使其虚拟机效率提升了 200%,并将更多裸机服务器资源用于客户端负载,而非像以往使用 VMware 时那样用于虚拟机…...
软件项目标书参考,合同拟制,开发合同制定,开发协议,标书整体技术方案,实施方案,通用套用方案,业务流程,技术架构,数据库架构全资料下载(原件)
1、终止合同协议书 2、项目合作协议 3、合同交底纪要 4、合同管理台账 软件资料清单列表部分文档清单:工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单&…...
Jenkins环境一站式教程:从安装到配置,打造高效CI/CD流水线环境-Ubuntu 22.04.5 环境离线安装配置 Jenkins 2.479.1
文章目录 Jenkins环境一站式教程:从安装到配置,打造高效CI/CD流水线环境-Ubuntu 22.04.5 环境离线安装配置 Jenkins 2.479.1一、环境准备1.1 机器规划1.2 环境配置1.2.1 设置主机名1.2.2 停止和禁用防火墙1.2.3 更新系统 二、安装配置Jenkins2.1 安装JDK…...
【Android】ARouter源码解析
本篇文章主要讲解了 ARouter 框架的源码分析,包括其初始化过程、核心方法等。 初始化 在使用ARouter的时候我们都会先进行初始化: ARouter.init(this);我们看下 init() 源码: public static void init(Application application) {// 检查…...
计算直线的交点数
主要实现思路 整体流程思路: 程序旨在解决给定平面上不同数量的直线(无三线共点),求出每种直线数量下所有可能的交点数量,并按要求格式输出的问题。整体通过初始化一个二维数组来存储不同直线数量与交点数量对应的存在…...
从零开始学SCL:手把手教你实现天塔之光、数码管显示等工业控制案例(含避坑指南)
从零开始学SCL:手把手教你实现天塔之光、数码管显示等工业控制案例(含避坑指南) 工业自动化领域中,PLC编程是核心技能之一。而SCL(Structured Control Language)作为IEC 61131-3标准中的高级文本语言&#…...
ArcGIS核密度分析实战:基于上海市餐饮POI的商业热点识别
1. 核密度分析能帮你做什么? 如果你正在考虑开一家餐厅,或者想了解上海哪些区域餐饮业最发达,核密度分析就是你的好帮手。简单来说,这个技术可以把一堆分散的餐饮店位置数据,变成一张直观的"热度地图"。我去…...
如何突破原神60帧限制?genshin-fps-unlock带来的视觉体验升级
如何突破原神60帧限制?genshin-fps-unlock带来的视觉体验升级 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 3大核心收益:更高帧率、更流畅操作、零风险体验 问…...
猫抓:重构网页资源获取与媒体管理的高效解决方案
猫抓:重构网页资源获取与媒体管理的高效解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容爆炸的时代,网页资源获取已成为内容创作者、教育工作者和普通用户的…...
Qwen3-0.6B-FP8效果对比:与Phi-3-mini、Gemma-2B在低资源设备上的实测PK
Qwen3-0.6B-FP8效果对比:与Phi-3-mini、Gemma-2B在低资源设备上的实测PK 想在小显存的电脑上跑个大模型,体验一下AI对话的乐趣,是不是总被“显存不足”的提示劝退?别急,今天我们就来一场专为“小显存”设备准备的AI模…...
如何分析竞争对手的seo关键词
<h2>如何分析竞争对手的SEO关键词</h2> <p>在当今竞争激烈的互联网市场中,了解和分析竞争对手的SEO关键词是提升自己网站排名的关键。SEO关键词分析不仅可以帮助你发现市场上的机会,还能让你更好地了解竞争对手的策略,从而…...
Windows/Linux双平台实战:用Docker快速部署MySQL 5.7.36并导入数据
跨平台Docker实战:MySQL 5.7.36高效部署与数据迁移指南 在混合开发环境中,数据库的快速部署与迁移往往是影响团队协作效率的关键因素。想象一下这样的场景:一位开发者刚在Windows笔记本上完成本地测试,需要将包含复杂表结构的MySQ…...
Pixel Mind Decoder 本地开发环境搭建:使用PyCharm进行调试与开发
Pixel Mind Decoder 本地开发环境搭建:使用PyCharm进行调试与开发 1. 准备工作与环境配置 在开始使用PyCharm进行Pixel Mind Decoder的开发之前,我们需要先完成一些基础准备工作。这部分内容将帮助你快速搭建起开发环境,为后续的调试和开发…...
Python多线程/多进程内存爆炸真相:GIL锁外的隐性开销、共享对象深拷贝黑洞与零拷贝迁移方案
第一章:Python智能体内存管理策略入门导论Python智能体(如基于LLM的Agent、ReAct架构或Tool-Calling系统)在运行过程中频繁创建、传递与销毁对象,其内存行为远超普通脚本应用。理解CPython底层的引用计数、循环垃圾回收࿰…...
FPGA做信号处理,你的浮点加减法拖后腿了吗?聊聊Vivado Floating-point IP核的性能调优
FPGA信号处理中浮点加减法的性能瓶颈与Vivado Floating-point IP核深度调优 在雷达脉冲压缩、波束成形等实时信号处理系统中,浮点运算单元往往是制约整体性能的关键瓶颈。许多工程师在完成基础功能验证后,常发现系统吞吐量不达标或时序无法收敛ÿ…...
