Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例

在使用Qt开发时我们经常会遇到这种情况:我们维护的老项目用的Qt版本比较旧,因为qt新老版本之间的差异比较大,直接把开发环境升级到新版本的Qt不太现实,可是我们在维护老项目的时候又会有使用新版本某个功能模块的情况。比方说,Qt5.10之前是不支持mqtt的,我们项目使用的Qt版本5.5,为了在我们项目中使用mqtt功能是不是就得把我们的开发环境升级到Qt5.10?答案当然是否定的,为了避免这种情况,Qt扩展某个功能是都是以子模块的形式发布,新版本的Qt一般都会将新增的功能模块打包到安装包中,当老版本的Qt需要使用新增功能模块时,我们只需要下载这个子模块的源码进行编译,然后安装到我们的开发环境中,这样我们就可以使用这个功能模块了。本文主要分为两部分,首先介绍一下Qt的安装目录,这里会着重介绍一下我们编译后生成的文件会分别放到哪个目录, 第二部分我们以qmqtt模块为例,演示一下安装步骤和注意事项。‘

QT安装目录介绍

我们以Qt5.9为例,安装目录如下所示:

Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例_第1张图片

我们添加的子模块都会放到5.9(Qt类库文件夹)这个目录下,我们再看一下它的目录结构:

Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例_第2张图片

我们介绍一下这几个目录,

bin:这个目录会存放一些Qt的运行库,我们将子模块编译后的.dll文件到这个目录下。

include:这个目录存放的是头文件,我们会将子模块的头文件放到这个目录下。

lib:这个目录存放是静态库文件,我们会将编译生成的.a文件放到这个目录下。

mkspace:这个目录下有个modules文件夹,我们会将编译子模块生成的pri文件放到这个目录下。

Qtmqtt安装示例

安装之前准备:因为这个模块的编译安装步骤使用了Perl脚本,所以在windows下安装需要安装Perl,安装方法请自行百度,ubuntu下因为默认安装了Perl所以可以省去这一步。

首先我们从github下载源码,地址:https://github.com/emqx/qmqtt

解压后源码的目录结构如下图所示:

Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例_第3张图片

 

我们用QtCreator打开qmqtt.pro文件,在项目配置界面做一下配置。

Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例_第4张图片

Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例_第5张图片

然后对这个项目进行编译,编译后我们会发现多出这几个文件夹:

Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例_第6张图片

我们在新添加make install步骤会将生成的这几个文件夹的文件拷贝到我们Qt安装目录对应的文件夹。

lib目录下文件的去向如下图:

Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例_第7张图片

mkspecs\modules-inst目录下的文件会被拷贝到上面介绍的mkspace目录下。

inlucde文件夹下有个QtQmqtt文件夹,这个文件夹会被拷贝到上面介绍到的include文件夹,这里有个问题要注意一下:我们打开QtQmqtt目录下发现只有一个QtQmqttDepends文件,没有源码中的头文件,这里可能是编译安装脚本的问题,我们可以从我们下载源码的src文件夹下找到所有的头文件,手动拷贝到这个QtQmqtt目录下,然后再将QtQmqtt文件夹拷贝到上面介绍的那个include文件夹。到此所有的编译安装工作就完成了。

测试:我们新建项目,在Pro文件中添加qmqtt模块。

Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例_第8张图片

我们就可以在项目中使用qmqtt这个功能模块了。

Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例_第9张图片

其他模块的安装都差不多,如果碰到上面脚本错误导致某个文件没有拷贝到指定目录,我们可以直接编译源码(不添加make install),然后手动将编译生成的文件拷贝到指定的安装目录。

你可能感兴趣的:(Qt以编译方式安装子模块(submodules),以qmqtt模块安装为例)