windows下Qt5自动编译配置QtMqtt环境(11)

文章目录

    • @[toc]
    • 1、概述
    • 2、准备
      • 1.1 下载源码
      • 1.2 配置环境
      • 1.3 解释原理
    • 3、编译
    • 4、验证
    • 5、参考
    • 6、视频

更多精彩内容
👉内容导航 👈
👉Qt网络编程 👈

1、概述

  • Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配置;

  • 网络所有的QtMqtt配置的文章都是编译完成手动复制,非常麻烦,对新手也非常不友好吗,容易漏了一些步骤;

  • 本文中主要说明windows下如何自动编译配置QtMqtt,无需手动拷贝、生成帮助手册

注意:

  1. 编译前需要安装perl,如果没有perl则编译后生成的头文件都是带.h后缀的。
  2. 工程里面需要有一个.git文件夹,否则不会指向perl。
  3. 如果不安装perl也可以编译,不过后续会出现部分报错,需要手动添加头文件。
  4. 只是Qt5需要安装perl,Qt6不需要。

演示环境:

环境版本
系统windows11
Qt5.14.2
QtMqtt5.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文件夹,如果是直接在浏览器下载的就没有,这里有两个解决办法;
    1. 在源码文件夹下创建一个.git文件夹;
    2. 将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编译配置教程;



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/488406.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于OpenAI Sora上线!AI视频生成的新纪元

OpenAI Sora的上线无疑是人工智能领域的一个重要进展&#xff0c;它标志着AI技术在视频生成和编辑方面迈出了一大步。 引言 在人工智能的快速发展中&#xff0c;OpenAI的最新力作——Sora&#xff0c;标志着AI视频生成技术的一个新纪元。Sora的上线不仅是技术上的一次飞跃&am…

K8S对接ceph的RBD块存储

1 PG数量限制问题 1.1 原因分析 1.还是老样子&#xff0c;先创建存储池&#xff0c;在初始化为rbd。 [rootceph141~]# ceph osd pool create wenzhiyong-k8s 128 128 Error ERANGE: pg_num 128 size 3 for this pool would result in 295 cumulative PGs per OSD (2067 tot…

Windows11安装Isaac Lab

1.1 下载文件 将 Isaac Lab 仓库克隆到您的工作空间&#xff1a; git clone https://github.com/isaac-sim/IsaacLab.git 1.2 创建Isaac Sim符号链接 F:cd IsaacLab 官方文档里路径/有问题&#xff0c;改成\&#xff09;&#xff1a; # 打开IsaacLab目录cd IsaacLab# 使用…

NES游戏机项目制作笔记(未完成)

24年12月1日晚记——在网上找项目学习的时候发现一个有意思的项目&#xff0c;准备靠这个应用一些STM32的高级功能。值得提醒的是——目的在于学习不可贪杯&#xff0c;注意效率 01 根据项目需求分析 为确保充分考虑每一个细节&#xff0c;并且让自己高效的完成项目制作&#…

ElasticSearch - 理解doc Values与Inverted Index倒排索引

文章目录 概述倒排索引&#xff1a;从图书馆的索引卡片谈起倒排索引的工作原理 docValues&#xff1a;从数据库的列式存储说起docValues的工作原理 docValues与倒排索引的对比两者的联系&#xff1a;组合使用&#xff0c;优化搜索与分析 小结 概述 在使用 Elasticsearch 进行大…

前端H5移动端基础框架模板 :Vue3 + Vite5 + Pinia + Vant4 + Sass + 附源码

技术栈选用 Vue3 Vite5 Pinia Vant4 Sass 源码地址&#xff1a; git clone https://gitee.com/gaiya001/h5-APP.git1. 1.vite.config.js文件配置 ** import { defineConfig } from vite // 导入 Vite 的配置函数 import vue from vitejs/plugin-vue // 导入 Vue 插件 i…

游戏引擎学习第36天

仓库 :https://gitee.com/mrxiao_com/2d_game 回顾之前的内容 在这个程序中&#xff0c;目标是通过手动编写代码来从头开始制作一个完整的游戏。整个过程不使用任何库或现成的游戏引擎&#xff0c;这样做的目的是为了能够全面了解游戏执行的每一个细节。开发过程中&#xff0…

C++小碗菜之五:GDB调试工具

“程序员不是编写代码的人&#xff0c;而是调试错误的人。” – 约翰本尼斯&#xff08;John Bennet&#xff09; 目录 前言 在虚拟机中安装 GDB GDB调试的实战演练 创建示例代码 例子&#xff1a; 使用 GDB 调试 编译代码 启动 GDB 设置断点 运行程序 打印变量值 …

【软件测试面试题】测试理论/基础面试(持续更新)

Hi&#xff0c;大家好。最近很多朋友都在说今年的互联网行情不好&#xff0c;面试很难&#xff0c;不知道怎么复习&#xff0c;我最近总结了一份在软件测试面试中比较常见的测试理论/基础面试面试题合集&#xff0c;希望对大家有帮助。建议点赞收藏再阅读&#xff0c;防止丢失&…

(css)element中el-select下拉框整体样式修改

(css)element中el-select下拉框整体样式修改 重点代码&#xff08;颜色可行修改&#xff09; // 修改input默认值颜色 兼容其它主流浏览器 /deep/ input::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.50); } /deep/ input::-moz-input-placeholder {color: rgba…

十一、容器化 vs 虚拟化-Docker

文章目录 前言一、Docker 介绍1. 简介2. 应用场景3. 特点4. Docker和虚拟机之间的区别5. 解决痛点1. 解决依赖兼容2. 解决操作系统环境差异3. 小结 二、Docker 架构三、工作流程五、Docker 核心组件及其工作机制1. Docker 客户端&#xff08;Docker Client&#xff09;2. Docke…

游戏引擎学习第38天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾上次的内容。 我们之前讨论了将精灵放在屏幕上&#xff0c;但颜色错误的问题。问题最终查明是因为使用了一个调整工具&#xff0c;导致文件的字节顺序发生了变化。重新运行“image magic”工具对一些大图像进行重新处理后&am…

Docker 安装Nginx与配置Nginx

文章目录 前言 1.什么是nginx2.为什么使用nginx3.高并发4.Nginx特点&#xff1a; 一、docker安装nginx二、Nginx配置简介 1.文件讲解2.nginx.conf3.default.conf 三、nginx负载均衡 1.配置服务器列表地址2.多集群策略 2.1 权重配置2.2 ip_hash2.3 least_conn2.4 fair2.5 url_h…

qwen2.5 模型JSON格式化输出案例

这篇不是通过prompt提示去实现,是用vllm、ollama推理框架支持;这里也给出个prompt实现的案例参考 1、 vllm推理 参考:https://docs.vllm.ai/en/latest/usage/structured_outputs.html 模型vllm运行: 用的Qwen/Qwen2.5-3B-Instruct模型 vllm serve ./qwen2_5 --host 0.0…

黑马商城微服务复习(6)

MQ高级 1. 消息可靠性2. 发送者的可靠性1. 发送者问题2. 生产者重试机制3. 生产者确认机制4. MQ可靠性5. 消费者的可靠性 3. 延迟消息1. 定义2. 死信交换机 1. 消息可靠性 发送消息时丢失&#xff1a; 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生产者发…

UE5.5 Geometry库平面切割原理分析

平面切割--FMeshPlaneCut 平面定义: 面上一个点 法线 算法流程如下 求几何体所有顶点和面的有向距离(Signs) Sign计算&#xff1a; float Sign (VertexPos - PlaneOrigin).Dot(PlaneNormal); 遍历所有几何体所有交叉边, 进行SplitEdge 对于位于切割面两侧的交叉边(Sign…

TMS Software:TMS BIZ产品——TMS XData

TMS XData 用于多层REST/JSON HTTP/HTTPS应用服务器开发和ORM远程处理的Delphi框架。 TMS扩展数据可同时用于以下框架&#xff1a; VCLWEBFMX TMS XData可同时用于以下操作系统/浏览器&#xff1a; TMS XData可同时用于以下IDE&#xff1a; 功能概述 基于REST/JSON架构风格的…

优化移动端H5:常见问题与解决方案

移动端H5开发中的“坑”与解决方案 本文介绍了开发中遇到的几个关于移动端H5开发中的小问题&#xff0c;以及解决的方法。 一、iOS滑动不流畅问题 在iOS设备上&#xff0c;H5页面的滑动效果有时会出现不流畅的情况&#xff0c;特别是在页面高度超过一屏时。这通常是由于iOS的…

【论文速读】| AttackQA:利用微调及开源大语言模型辅助网络安全运营的数据集的开发与应用

基本信息 原文标题: AttackQA: Development and Adoption of a Dataset for Assisting Cybersecurity Operations Using Fine-Tuned and Open-Source LLMs 原文作者: Varun Badrinath Krishna 作者单位: SambaNova Systems 关键词: 网络安全、检索增强生成&#xff08;RAG&…

Ubuntu24.04配置STMTrack

项目地址&#xff1a;https://github.com/fzh0917/STMTrack 一、安装 CUDA 参考链接&#xff1a; Ubuntu24.04配置DINO-Tracker Ubuntu多CUDA版本安装及切换 由于之前在其他项目中已经安装了 CUDA12.1&#xff0c;这次需要安装另一个版本。 1. 查看安装版本 按照 requireme…