Qt Base(5.9)を静的リンク用にビルドしてみた(MSVC向け)
Qt公式で動的リンク用のビルド済みのライブラリが配布されているが、静的リンク用のライブラリは配布されていないので自分用にビルドしてみたのでメモ。
ソースコードを取ってくる
githubのQt公式のレポジトリからqtbaseのソースコードを取ってきます。今回はQtWebkitなどは使わないのでQt Baseだけビルドします。
$ git clone --depth 1 https://github.com/qt/qtbase.git
今回はビルドしたいだけなのでclone時に--depth 1
オプションを付けています。(shallow cloneってやつですね)
jomを用意する
nmakeコマンドは並列ビルドには対応していなので、代わりにjomを使ってビルドします。適当なディレクトリに展開して、必要ならパスを通しておきましょう。 (ビルドには結構時間がかかるのでjomを使って並列ビルドすることをおすすめします)
> set path=%path%;C:\Users\tumugin\Documents\jom
ビルド設定を弄る
生成されるライブラリ類も静的リンクでビルドしたいので、mkspecs/common/msvc-desktop.conf
の-MD
になっているところを-MT
に変更します。
(作成するアプリケーションを-MT
でビルドする際にはリンクするライブラリも-MT
でつくらないとビルドできません)
diff --git a/mkspecs/common/msvc-desktop.conf b/mkspecs/common/msvc-desktop.conf index f95a3bbd..b9db019f 100644 --- a/mkspecs/common/msvc-desktop.conf +++ b/mkspecs/common/msvc-desktop.conf @@ -30,9 +30,9 @@ QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = -nologo -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 -QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MD -QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -MD -Zi -QMAKE_CFLAGS_DEBUG = -Zi -MDd +QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT +QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -MT -Zi +QMAKE_CFLAGS_DEBUG = -Zi -MTd QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_LTCG = -GL
続いて、configureしてビルドに必要なファイルを生成します。
VS2017用 x64 Native Tools コマンドプロンプト
(32bitなバイナリが欲しいならx86
の方)を立ち上げて、configure.bat
を呼び出します。
> configure.bat -prefix C:\Users\tumugin\qt5basestatic -debug-and-release -confirm-license -opensource -static -nomake examples -no-angle -no-opengl
ここで各オプションの説明ですが、qtbaseのレポジトリ内に分かりやすい説明があるのでそちらを参照してください。 (今回はopenglを使う予定が無い上に色々エラーが出るのでビルドしませんでした)
> jom -j8 > jom install -j8
あとはビルドするだけなのでjom
でビルドしましょう。(そこそこ時間がかかります)
ちなみに、*nixのmakeコマンドのように-jの後に同時に実行するジョブの数を指定できます。(指定しないと自動的にPCのスレッド数に合わせてくれるようです)
エラーが出なければ、-prefix
で指定したディレクトリにビルドしたバイナリをjom install
コマンドでコピーしましょう。
正常にコピー出来ていれば展開先のlib/に.libファイルがあると思います。
おまけ
ビルド時に生成されるファイルは全て.gitignore内でgitで追跡しないようになっているので、もし生成物をまとめて消したい時はgit clean -fdx
で消しましょう。