以下、Windows環境下でのCMakeによる mosquitto のビルド方法を説明します。
はじめに
概要
あらかじめ簡単に説明すると、最終目標を mosquitto.exe または mosquitto.dll の出力とした場合、作業は以下の流れになります。
- CMake を使用することで VisualStudio のソリューションファイルを生成する
- 生成された VisualStudio のソリューションファイルを使用して、VC++のコンパイラで mosquitto.exe および mosquitto.dll を出力する
事前に必要な環境
- mosquitto のソースファイルを用意
- こちらからリポジトリのクローンまたはダウンロードができます
- VisualStudio2013以降
- 詳細は不明ですが、VisualStudio2010ではビルド失敗しました(
stdbool.h
が存在しないためみたいです) - 参考までに、私自身は VisualStudio2017 でビルド成功しました
- 詳細は不明ですが、VisualStudio2010ではビルド失敗しました(
- OpenSSL(32bit版)
- もしかしたら 64bit 版でもいいかもしれません
- 以下の階層に配置しないといけないみたいです
C:\OpenSSL-Win32
- また、以下を環境変数の Path に追加する必要があるみたいです
C:\OpenSSL-Win32\bin
- CMake
- こちらなどから CMake をダウンロードします。(
Binary distributions
がインストーラです) - 64bit版でも、mosquitto を 32bit でビルドできるので、x86かx64どちらでもいいと思います
- ある程度新しいバージョンでないと、VisualStudio2017 等を選択できないので注意してください
- 参考までに、私自身は Ver3.19.4 で生成実績があります
- こちらなどから CMake をダウンロードします。(
- pthreads
- インストール方法は失念してしまいました(後日加筆します)
- 後追いで記事を書いているので、このフォルダはもしかしたら自動生成されるのかもしれません。その場合はすみません
作業
1. CMake で VisualStudio のソリューションファイルを生成する
CMake を起動して、以下の通り入力(ブラウズでフォルダーを選択)します。
- 「source code」 に mosquitto のリポジトリフォルダを指定(
config.mk
のあるフォルダ) - 「build the binaries」 は任意(私は
source code
と同じところを指定しました)
次に、「Configure」ボタンを押して、生成するVSソリューションファイルのバージョンを指定します。
前述したとおり、VS2013以上を選択しないと最終的に mosquitto 出力に成功しないみたいです。
私は VS2017 を指定しました。
選択したら「Finish」を押します。
すると、CMake が動作し始めます。
出力ウィンドウに Configuring Done
が表示されたら、とりあえず Confiture は成功みたいです。
ここで、 WITH_THREADNING
にチェックが入ってないと、mosquitto.dll において mosquitto_loop_start
などの関数が使用できなくなります。
ただし、この関数自体がレガシーなので、使用目的によっては不要かもしれません。
以上で、「Generate」ボタンを押します。
出力ウィンドウに Generating Done
が表示されたら完了です。
2. VisualStudio から mosquitto をビルドする
CMake の 「build the binaries」で指定したフォルダに mosquitto.sln
が出力されているので、それを起動します。
複数のプロジェクトがありますが、「ALL_BUILD」を選択してビルドしてみてください。
これが通れば、とりあえず全てが出力成功になります。
補足
私の環境では、ビルドすると client_shared.c
の L1198 あたりでエラーになりました。どうやら ∞
というマルチバイト文字が悪さをしている?っぽいのが原因みたいです。
client で使用する箇所みたいなので、使用することはないかなと思い、とりあえず if 文自体を消去するとビルドは通りました。
出力場所
- mosquitto.dll は、
lib\(Debug|Release)
フォルダに出力されるようです - mosquitto.exe は、
src\(Debug|Release)
フォルダに出力されるようです
コメント