QtMqtt について
MQTT は、IBM が考案した軽量な通信プロトコルで(MQTT の基本知識)、データ量の削減や省リソースの点でIoT界隈でも採用されているプロトコルです。
このプロトコルを、 Qt ベースで実装したライブラリとして Qt Mqtt 5.12 が提供されています。
※注 GPLです
こちらのライブラリを、自身の開発環境に導入する手順を記していきます。
環境について
作業は x86-64、 ubuntu16.04、Qt 5.12.0 を用いて進めます。
ただ、同じ方法で Windows 環境(UWP含む)でも導入可能でしたので、多くの方法は共通すると思います。
私の環境下では、Qtは以下のパスにインストールしています。
$ ls /opt/qt/Qt5.12.0
5.12.0 InstallationLog.txt MaintenanceTool.dat components.xml
Docs Licenses MaintenanceTool.ini dist
Examples MaintenanceTool Tools network.xml
下準備
まず、対象のビルド環境を準備しておくこと。
セルフビルドだけに限れば、インストールした環境のデフォルトになっているはずなので、特に用意する必要はありません。
Android や Windows10 IoT上で動作する QtMqtt を用意したい場合に別途準備する必要があります。
その手順については・・・、ある程度情報は転がっているだろう、という他力本願で。
必要性を感じたら折を見て記事を書きたいと思います。
QtMqtt ソースコードの取得
肝心の QtMqtt は下記で公開されているので、適宜取得してください。
https://github.com/qt/qtmqtt.git
また、現時点では、master は 5.11 なので、5.12 向けにビルドする際はブランチを切り替えて作業を進めてください。
$ git clone https://github.com/qt/qtmqtt.git
$ cd qtmqtt
$ git branch
* 5.11
$ git checkout remotes/origin/5.12 -b 5.12
Branch 5.12 set up to track remote branch 5.12 from origin.
Switched to a new branch '5.12'
$ git branch
5.11
* 5.12
Makefile の生成
旧来から、Qt 用のプロジェクトファイル(*.pro)から、Makefile を生成する方法が多く取られ、qtmqtt でもその方法を採用しています。
qmake は、Qt のインストール先の下記ディレクトリに、ターゲットごとに用意されているため、作成したいターゲットにあわせて使い分けます。
$ ls /opt/qt/Qt5.12.0/5.12.0/*/bin/qmake
/opt/qt/Qt5.12.0/5.12.0/android_arm64_v8a/bin/qmake
/opt/qt/Qt5.12.0/5.12.0/android_armv7/bin/qmake
/opt/qt/Qt5.12.0/5.12.0/android_x86/bin/qmake
/opt/qt/Qt5.12.0/5.12.0/gcc_64/bin/qmake
それぞれ、以下の使い分けになります。
ディレクトリ名 | ターゲット |
---|---|
android_arm64_v8a | ARMv8 以降の 64bit Android 向け |
android_armv7 | ARMv7 以降の 32bit Android 向け |
android_x86 | x86 の 32bit Android 向け |
gcc_64 | x86-64 の 64bit PC Linux 向け |
PC Linux向けに作りたい場合は、gcc_64 以下の qmake を使い、ARMv7 の 32bit Android 向けに作りたい場合は、android_armv7 以下の qmake を使うことになります。
なお、android 向けにビルドを行う場合、Android NDK をインストールする必要があり、そちらへのパスも設定しておく必要があります。
(下記は Android SDK を /opt/google/android-sdk にインストールしている場合の例です)
$ export ANDROID_NDK_ROOT=/opt/google/android-sdk/ndk-bundle/
PC 向けのライブラリを生成したい場合は、gcc_64 以下の qmake を使います。
Android 向け等、違うターゲット用に作りたい場合は、上記表を参考に、作りたいターゲット用の qmake を指定するだけです。
$ cd qtmqtt
$ ls
LICENSE.GPL3 dist qtmqtt.pro sync.profile
LICENSE.GPL3-EXCEPT examples src tests
$ /opt/qt/Qt5.12.0/5.12.0/gcc_64/bin/qmake
$ ls
LICENSE.GPL3 Makefile examples src tests
LICENSE.GPL3-EXCEPT dist qtmqtt.pro sync.profile
あとは、ターゲットを問わず make コマンドでビルド&インストールを実施するだけ(Qt SDK 以下にインストールされるので書き込み権限には注意)。
$ make
$ make install
$ ls /opt/qt/Qt5.12.0/5.12.0/gcc_64/lib/libQt5Mqtt.*
/opt/qt/Qt5.12.0/5.12.0/gcc_64/lib/libQt5Mqtt.la
/opt/qt/Qt5.12.0/5.12.0/gcc_64/lib/libQt5Mqtt.prl
/opt/qt/Qt5.12.0/5.12.0/gcc_64/lib/libQt5Mqtt.so
/opt/qt/Qt5.12.0/5.12.0/gcc_64/lib/libQt5Mqtt.so.5
/opt/qt/Qt5.12.0/5.12.0/gcc_64/lib/libQt5Mqtt.so.5.12
/opt/qt/Qt5.12.0/5.12.0/gcc_64/lib/libQt5Mqtt.so.5.12.0
/opt/qt/Qt5.12.0/5.12.0/gcc_64/lib/libQt5Mqtt.so.5.12.0.debug
$ ls /opt/qt/Qt5.12.0/5.12.0/gcc_64/include/QtMqtt
5.12.0 QtMqtt
QMqttAuthenticationProperties QtMqttDepends
QMqttClient QtMqttVersion
QMqttConnectionProperties qmqttauthenticationproperties.h
QMqttLastWillProperties qmqttclient.h
QMqttMessage qmqttconnectionproperties.h
QMqttMessageStatusProperties qmqttglobal.h
QMqttPublishProperties qmqttmessage.h
QMqttServerConnectionProperties qmqttpublishproperties.h
QMqttStringPair qmqttsubscription.h
QMqttSubscription qmqttsubscriptionproperties.h
QMqttSubscriptionProperties qmqtttopicfilter.h
QMqttTopicFilter qmqtttopicname.h
QMqttTopicName qmqtttype.h
QMqttUnsubscriptionProperties qtmqttversion.h
QMqttUserProperties