Qt5の最新版をビルドしてお試しする Windows編

Qt5の最新版をビルドしておためしする記事です。

公式のドキュメントはこちら「Building Qt 5 from Git
補足する感じです。
基本は見てもできません。

リポジトリにある「README」も見るといろいろヒントがあります。



/// 環境(参考) ///
・Windows 7 Pro (64bit)
・Virtual Boxにインストール
・割り当てコア数2
・割り当てメモリ2G
・3DアクセラレーションON(だけどVBのドライバが対応してないと言われて無意味に・・・。)

注意
作業をするフォルダは「c:\qt5」として以下の説明をします。



/// 環境作成 ///
1.必要なツールをインストール
 以下のツールが必要になります。
 ・VisualStudio2008 Pro(もしくは2010)
 ・ActivePerl (5.12以上)
 ・ActivePython (2.7以上)
 ・git
 ・Windows SDK 7

2.設定ファイルなど修正
2ヶ所のファイルのコンパイル設定を修正します。
リリース用に「-O2」「-O1」とあるので「-Od」変更します。
デバッグ用に念のため「-Od」を追加します。
(2010の場合は変更するファイルのフォルダが隣です。)

以下実際のパッチ
c:\qt5\qtbase用
diff --git a/mkspecs/win32-msvc2008/qmake.conf b/mkspecs/win32-msvc2008/qmake.conf
index 46cccff..54c25fc 100644
--- a/mkspecs/win32-msvc2008/qmake.conf
+++ b/mkspecs/win32-msvc2008/qmake.conf
@@ -19,9 +19,9 @@ QMAKE_YACCFLAGS         = -d
 QMAKE_CFLAGS            = -nologo -Zm200 -Zc:wchar_t
 QMAKE_CFLAGS_WARN_ON    = -W3
 QMAKE_CFLAGS_WARN_OFF   = -W0
-QMAKE_CFLAGS_RELEASE    = -O2 -MD
-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
-QMAKE_CFLAGS_DEBUG      = -Zi -MDd
+QMAKE_CFLAGS_RELEASE    = -Od -MD
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -Od -MD -Zi
+QMAKE_CFLAGS_DEBUG      = -Zi -MDd -Od
 QMAKE_CFLAGS_YACC       =
 QMAKE_CFLAGS_LTCG       = -GL
 QMAKE_CFLAGS_MP         = -MP
diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32
index c19fbcc..5eaf861 100644
--- a/qmake/Makefile.win32
+++ b/qmake/Makefile.win32
@@ -31,7 +31,7 @@ CFLAGS_EXTRA      = /MP
 !endif

 CFLAGS_BARE = -c -Fo./ \
-              -W3 -nologo -O1 \
+              -W3 -nologo -Od \
               $(CFLAGS_EXTRA) \
               -I$(QMKSRC) -I$(QMKSRC)\generators -I$(QMKSRC)\generators\unix -I$(QMKSRC)\generators\win32 -I$(QMKSRC)\generators\mac -I$(QMKSRC)\generators\integrity \
               -I$(BUILD_PATH)\include -I$(BUILD_PATH)\include\QtCore -I$(BUILD_PATH)\include\QtCore\$(QT_VERSION) -I$(BUILD_PATH)\include\QtCore\$(QT_VERSION)\QtCore \

この設定をしないとビルドがとおりません。
ところどころのプロジェクトでui_hoge.hが作成されなくなっていました。
よくよく調べるとqmakeのソースに以下のようなコメントがありました。
が、結局上記の2ヶ所のどちらかでいいのかどっちもなのかはわかりませんでした。
(というか深く追ってない)
/* Disable optimization in getProjectUUID() due to a compiler
* bug in MSVC 2010 that causes ASSERT: "&other != this" in the QString
* copy constructor for non-empty file names at:
* filename.isEmpty()?project->first("QMAKE_MAKEFILE"):filename */
しかしコピーコンストラクタでアサートでるから最適化を切ってねと・・・。


一部のプロジェクトをビルド対象から外します。
はずさなくても大丈夫になりました。
C:\qt5\qttools用
diff --git a/examples/examples.pro b/examples/examples.pro
index 3c12ee6..996229c 100644
--- a/examples/examples.pro
+++ b/examples/examples.pro
@@ -1,2 +1,2 @@
 TEMPLATE = subdirs
-SUBDIRS +=  help designer uitools
+#SUBDIRS +=  help designer uitools
diff --git a/tests/tests.pro b/tests/tests.pro
index 85e4f3a..db5c36a 100644
--- a/tests/tests.pro
+++ b/tests/tests.pro
@@ -1,2 +1,2 @@
 TEMPLATE = subdirs
-SUBDIRS +=  auto
+#SUBDIRS +=  auto



/// ビルドの準備 ///
1.Qt5のソースを取得
 >cd c:\
 >git clone git://gitorious.org/qt/qt5.git qt5

2.リポジトリを初期化
 >cd qt5
 >perl init-repository

3.環境変数の設定
 >CALL "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" amd64
 >set QTDIR=c:\qt5\qtbase
 >set PATH=%QTDIR%\bin;%PATH%
 >set QMAKESPEC=win32-msvc2008

バッチファイルの最後のパラメータは環境にあわせてどうぞ。

4.パッチの適用
 >cd qtbase
 >patch -p1 forqtbase.patch
 >cd ..\qttools
 >patch -p1 forqttools.patch
 >cd ..



/// ビルド ///
1.configure
 >configure -developer-build -opensource -nomake examples -nomake tests -opengl desktop -prefix "c:\qt\qt5.0.0b"
 「-confirm-license」をつけると途中に表示されるライセンス条項に自動Acceptします。

2.ビルド
 >perl build
 >nmake
あとは待つだけ。
デバッグとリリース両方ビルドして3時間半くらいかかりました。

3.インストール
 >nmake install

2012/11/11追記
上記のconfigureのパラメータを追加しました。
OpenGLに関連する部分のビルド方法が変更になっためです。
1.OpenGLの命令をDirectXに変換してくれるライブラリを使う方法
2.OpenGLのネイティブドライバを使用する方法
今回追加したパラメータは2の方法を取る場合です。

プロジェクトのルートにあったbuildというシェルスクリプトがなくなって普通にnmakeを叩くだけになりました。
configureするときに-prefixでインストール先のフォルダを指定しておきます。やらなくてもOKなのですがビルドフォルダと分離できるので。

/// クリーン ///
 >git submodule foreach --recursive "git clean -dfx"
 Webの説明にはシングルクォートで書かれてますがエラーになるのでダブルで。



masterの最新を使用するとやっぱりQt Creatorでqmlviewerを認識できないと言われるので6/29の3つ目のコミットまで戻ると使えます。
Qt Creatorはただのエディタと割りきってコマンドラインとかからqmlscene.exeを叩けば使えますけどね。

相変わらずqmlviewerがないと警告が出ますが、Qt Quick UIアプリの場合はqmlsceneを使用してQtCreatorから実行できるので特に問題は無いです。
configreでprefixつけてインストールすれば直るよって噂を聞いたのですが相変わらずでした・・・。