2012年9月22日土曜日

Qtの32bit/64bit版両方をビルド

Webで探すとQtのビルドの方法はいろいろ見つかるけれど、微妙に書いてあることが食い違っていたり、さらに64bit版のビルドについてはあまり詳細に書いてないことが多いので、自分がやった内容をまとめてみた。

目標は統合開発環境であるQt Creatorは使わず、Visual Studio 2010上でQtを使ったプロジェクトをビルドすること。

まず、Qtのダウンロード。古い記事にはNokiaのサイト内にリンクされているものが多いが、これはもう古い。オープンソース版は下記URLからダウンロードする。
http://qt-project.org/downloads

ダウンロードするものは以下。(執筆時の最新版は4.8.3)
・Qt SDK
・Qt librariesのソースコード(zipまたはtar.gz)
・Qt Visual Studio Add-in

Qt SDKのインストール
Qt SDKは一式が揃ったものだが、今回は自前でビルドするので本当は必要ない。ただ、サンプルをビルドして確認するのに便利だったり、あと後述で使うjomツールが入っているので、ダウンロードしてインストールする。

ソースコードを展開
Qt librariesのソースコードを「C:\Qt\4.8.3」に展開。展開の際に「C:\Qt\4.8.3\bin」などのフォルダが生成されるようにする。

DefaultLocalizationStrategy.cppの修正
C:\Qt\4.8.3\src\3rdparty\webkit\Source\WebCore\platform フォルダにある DefaultLocalizationStrategy.cpp をエディタで開いて、325行目と327行目にある全角のダブルクォーテーションを半角の「'」に書き換える。こうしないと後のコンパイル時にエラーが発生する。(ソースを書き換えずにエンコードを変えるだけでもいいらしいが試していない)

64bit版用フォルダの用意
「C:\Qt\4.8.3」のフォルダの内容をそのまま「C:\Qt\4.8.3_x64」にコピーする。

同一のソースコードを32/64bit版で別々のフォルダに複製して用意するのはディスクスペースの無駄のように思えるが、こうしないとVisual Studio Add-inにとって都合が悪い。(他のサイトではビルド後にbinやlibフォルダを退避するだけでいいというのがあったが、これを参考にしてしまったためにかなり嵌ってしまった)

32bit版のビルド
スタートメニューからVisual Studio Tools内にある[Visual Studio コマンド プロンプト (2010)]を呼び出して、次の順に実行する。

まずbinフォルダにパスを通すため次の行を実行。このフォルダにはビルド中に必要なツール入っている。
PATH=%PATH%;C:\Qt\4.8.3\bin

それからQtの先頭フォルダに移動。
CD \Qt\4.8.3

そしてconfigureでビルド環境に応じたファイルを生成する。(Visual Studioのバージョンが違う場合、-platform以降を変更する必要がある)
configure -debug-and-release -D _CRT_SECURE_NO_WARNINGS -platform win32-msvc2010
このとき途中でオープンソースと商用版どっちを使うかを聞かれるので、oを指定。次の確認でyを指定。15分程度かかる。

そしてビルド。
 \QtSDK\QtCreator\bin\jom.exe -j 4

最後の数字は並列コンパイルを行うコア数なので、使用環境に応じて変更する。ただ、ディスクアクセスが多いので、多分これ以上の数字にしてもあまり意味がないかもしれない。

また、標準的なビルド方法としてはnmakeを使うとなっているが、これだと並列コンパイルができないので時間がかかりすぎるのでお勧めしない。ただ、jomを使って並列コンパイルしても2時間近くはかかるので注意。

これで32bit版は完成。

64bit版のビルド
「C:\Qt\4.8.3」のフォルダを「C:\Qt\4.8.3_x64」に置き換えて、32bit版とまったく同様に行う。ただし、コマンドプロンプトの呼び出しにはVisual Studio Tools内にある[Visual Studio x64 Win64 コマンド プロンプト (2010)]を用いる。

Visual Studio上での設定
Visual Studio Add-inをインストールしてからVisual Studioを起動すると、メニューに「Qt」が追加されている。この中の「Qt Options」を呼び出し、以下のように名前・パスを32bit/64bitのそれぞれで登録する。(実際は名前はなんでもいい)

Name Path
4.8.3 C:\Qt\4.8.3
4.8.3 x64 C:\Qt\4.8.3_x64

メニュー[ファイル > 新規作成 > プロジェクト]を呼び出すと、[Qt4 Projects]という項目が追加されているので、この中にある[Qt Application]を選んでそのまま進めていくと、Qt用のプロジェクトができあがる。

作成されたプロジェクトは32bit用なので、メニュー[プロジェクト > 構成マネージャー]でアクティブソリューションプラットフォームにx64を作成して、これをアクティブソリューションとして選んでおく。

そして、ソリューションエクスプローラ内のソリューションの項目(つまり一番上のもの)上で右クリックし、[Change Solution's Qt Version]を選んで、使用するQtのバージョンに適切なものを選ぶ。この項目は32bit/64bit別々に記憶されるので、最初に一度指定すれば後でアクティブプラットフォームを切り替えても大丈夫。

これでWin32/x64それぞれのソリューションをビルドすれば32bit版/64bit版の実行バイナリがそれぞれ出来上がって完成。


お疲れ様でした。以上の工程は自分が実際に行ったもので、必ずしもこの手順が最も良いというわけではないと思いますが、せめて一助になれば幸いです。