Windows 7でQt5.4.0をビルドする。その１(Qtのインストール)

## 1. はじめに
　私は、今まで主にファームウェア(時々Windows)の世界の住人で、最近FOSSの世界に飛び込みました。そして、dllが苦手です。単純なので静的リンクしたい人なのです。

　そんな私が最近Qtを始めたのですが、公開されているQtのバイナリーは動的リンクでした。そこで、FOSSに慣れるついでに静的リンクのQt開発環境を用意しようと、[ここ](http://qt-project.org/wiki/Building_Qt_5_from_Git "[Qt Project] Building Qt 5 from Git")の手順をベースにしてQtをビルドしました。
　結果、うまいことできましたので、記憶が新しいうちにビルド手順をまとめてみました。

　長くなりすぎたので２つに分けてます。
　このエントリーでQt5.4.0を準備してHallo Worldするところまで書きます。
　[次のエントリー](./acb465f388aa75f5d6a5 "Windows 7でQt5.4.0を64ビット・スタティック・ビルドする　その２(Qt5.4.0のビルド)")でQt5.4.0をビルドするところを書きます。

### 1.1 やったこと
* Qt5.4.0とmsysGit1.9.4をインストールして、Qt 32bit開発環境構築
* Qt5.4.0を動的と静的の両方でビルドして、Qt 64bit開発環境構築
* ビルドしたQtをインストール(必要なファイルを集め、ビルド環境から切り離します)
* [便利バッチ・ファイル](https://github.com/Chironian/BuildQt "[GitHub] Tools for building Qt5")(寝ている間にビルドするなどなど)の作成

### 1.2 選択
　Qt開発環境を構築する際、いくつかの選択肢があります。個人的都合により次のように決めました。

|決定内容|決定理由|
|:-------|:-------|
|作業環境はWindows 7 Professional 64bit|私が持っている唯一の環境なのは秘密です|
|Qtは5.4.0RC|明日(2014年12月9日)[5.4.0正式リリース予定](http://qt-project.org/wiki/Qt-5.4-release "[Qt Project] Qt5.4 release plan")なので流行に乗りたくて|
|コンパイラはMinGW-w64 4.9.1 rev2 [seh版](http://qt-labs.jp/2013/05/why-qt5-is-slow-on-windows.html "[Qt のあれこれ (仮)] Windows で Qt5 が遅いわけ")|Qt5.4.0RCのMinGW版と同じバーションの64bit|
|OpenGLはANGLE|動作する環境がより多そうなのでなんとなく|
|OpenSSLは非対応|[輸出入規制により専門家による検討が必要な地域があるらしい](http://qt-project.org/doc/qt-5/ssl.html#licensing-information "[Qt Project] Secure Sockets Layer (SSL) Classes")(というのは言い訳なのさ)|
|WebKitは非対応|べ、別に力尽きたわけじゃないんだからね！|

### 1.3 主要フォルダ構成
　下記のようにフォルダを決めました。このフォルダ割り当てを前提として説明していますが、N:は別のドライブへ変えても大丈夫です。あなたのシステムに合わせて"N:"を適宜読み替えて下さい。

|フォルダ|説明|
|:-----------|:------------|
|N:\Qt|ダウンロードしたQt5.4.0 32bit版(動的リンク)|
|N:\Qt\Tools\mingw491_64|ダウンロードしたMinGW-w64 4.9.1 rev2|
|N:\Qt\Tools\QtBinPatcher|ダウンロードしたQtBinPatcher 2.1.1 64bit|
|N:\Qt5\qt5|Qt5リボジトリとQt5.4.0ソース群|
|N:\Qt5\tools|便利バッチ・ファイル群|
|N:\Qt5\Qt540x64g491shared|Qt5.4.0 64bit版(動的リンク)ビルド・フォルダ|
|N:\Qt5\Qt540x64g491static|Qt5.4.0 64bit版(静的リンク)ビルド・フォルダ|
|N:\QtInstall\Qt5\Qt540x64g491shared|Qt5.4.0 64bit版(動的リンク)インストール・フォルダ|
|N:\QtInstall\Qt5\Qt540x64g491static|Qt5.4.0 64bit版(静的リンク)インストール・フォルダ|

　ビルドした結果は下記の４つのフォルダに生成されます。同じものが２つずつあるように見えますが目の錯覚と主張します。内３つは有用なのですぞ。

```text:Qt5.4.0-64bit版(動的リンク)ビルド・フォルダ
Qt自体を修正してデバッグする際に有用です。時間のかかるインストール作業をしないで使えますので。
でも、Qtリポジトリのソースに依存するため、ソースをスイッチなどすると、Qtアプリのビルド時に想定外の影響が発生します。
```
```text:Qt5.4.0-64bit版(静的リンク)ビルド・フォルダ
ここは余り有用ではないです。ビルドしたQtのインストール完了後、削除しても良いかも。8GBytesほどHDDを節約できます。
```
```text:Qt5.4.0-64bit版(動的リンク)インストール・フォルダ
Qtアプリのデバッグ・ビルド用にベストです。Qtリポジトリから独立しているのでスイッチしても影響しませんから、安心して使えます。
```
```text:Qt5.4.0-64bit版(静的リンク)インストール・フォルダ
Qtアプリの静的リンク版をリリース・ビルドする際に使います。デバッグ・ビルドすると異常に時間が掛かる(Hello Worldでも数分!!)のでデバッグには使いにくいです。
```

## 2. Qt5.4.0 32bitのインストール
### 2.1 Qt5.4.0(MinGW 32bit版)とQtCreatorのインストール
* ソフトウェア：[Qt オンラインインストーラー(Windows)](http://www.qt.io/download-open-source/#section-6 "オープンソース版Qt")
* ダウンロードするファイル：[qt-opensource-windows-x86-1.6.0-7-online.exe](http://download.qt-project.org/official_releases/online_installers/qt-opensource-windows-x86-online.exe "Click to download")
* インストール・オプション  
MinGWをインストールするため、Qt5.4の下のMinGW 4.9.1 (32 bit) OpenGLとToolsの下のMinGW 4.9.1を選択します。他のオプションはお好みで。

![01.Qtオプション.png](https://qiita-image-store.s3.amazonaws.com/0/59362/d7fe9bf6-462d-ceae-03aa-d24c50191842.png)

　インストールが終わると、QtCreatorのアイコンがデスクトップにできているので、ダブルクリックしてQtCreatorを起動します。次のような画面が出てくればインストールは成功しています。

![02.QtCreator.png](https://qiita-image-store.s3.amazonaws.com/0/59362/0ab78bc6-5a33-3f0a-5aa2-c03e62f77290.png)

### 2.2 Gitのインストール
　Qtアプリ開発のためにGitは必須ではありませんが、あると便利なので、ここでイントールします。

* ソフトウェア：[msysGit1.9.4](http://msysgit.github.io/ "git for windows")
* ダウンロードするファイル：[Git-1.9.4-preview20140929.exe](https://github.com/msysgit/msysgit/releases/download/Git-1.9.4-preview20140929/Git-1.9.4-preview20140929.exe "Click to download")
* インストール・オプション  
Qtのビルドのためにコマンド・プロンプトでGitを使えるようにする必要があるので、下記設定が必須です。

![00.Gitオプション.png](https://qiita-image-store.s3.amazonaws.com/0/59362/e2128f0c-cd43-afae-ae42-36cf13461d08.png)

* QtCreatorにGitを登録する  
これはオプションですが、やっておくとQtアプリをGit管理できるようになりますので便利です。  
`[ツール(T)]`→`[オプション(O)...]`をクリックし`[バージョン管理システム]`を選択して、`[Git]`タブをクリックします。そして、`[PATHに追加]`欄へGitのbinフォルダ(デフォルトならC:\Program Files (x86)\Git\bin)を設定して下さい。  

### 2.3 恒例のHello World
　では、早速恒例のHello Worldアプリを作ります。

### 2.3.1 Hello Worldプロジェクトの作成
　まず、`[ようこそ]`ボタンを押したり、QtCreatorを再起動したりして、最初の画面に戻って下さい。
　そこで、`[新しいプロジェクト]`ボタンを押すと、以下のようなダイアログがでてきます。

![03.新しいプロジェクト.png](https://qiita-image-store.s3.amazonaws.com/0/59362/c58c9b81-2cd7-fe62-e3f4-3318608733b2.png)

　QtQuickアプリケーションを選択し、`[選択...]`ボタンを押すと、次のようなダイアログが出てくるので、Qtアプリを作るパスとQtアプリの名前を適当に設定して下さい。(名称やパスがHelloWorldでなくてもHello Worldとちゃんと表示されますのでご安心を)

![04.プロジェクト名とパス.png](https://qiita-image-store.s3.amazonaws.com/0/59362/0561df6a-1a54-36c4-0953-8d0320cda85d.png)

　そして、`[次へ(N)]`ボタンを3回押して下さい。(今回はコンポーネントとキットはデフォルトのままで良いです。)
　次のような画面になるので、バージョン管理システムとしてGitを選択するとGitでバージョン管理されるようになります。(Hello Worldをバージョン管理しても仕方ないぞとは言わないで！)

![05.プロジェクト管理.png](https://qiita-image-store.s3.amazonaws.com/0/59362/16bb6555-852a-03f9-6a49-649bf8561e7f.png)

```text:Note　既に作られているプロジェクトをGitで管理する場合は
[ツール(T)]→[Git(G)]→[リポジトリの作成...]をクリックすれば良いです。
```

　最後に`[完了(F)]`ボタンを押すと、設定に従ってプロジェクトが生成され、次のような画面が出てきます。

![06.全体メッセージにエラー.png](https://qiita-image-store.s3.amazonaws.com/0/59362/4ca9589d-4faf-19c1-955e-57ed5391a3a9.png)

　ボタンを押した直後は、右下の`[全体メッセージ]`ペインは表示されていませんが、押した直後に`[6|全体メッセージ]`タブが点滅するので、つつくと出てきます。
　良く見ると何やら警告がでています。気持ち悪いので調べました。[ここ](https://bugreports.qt-project.org/browse/QTCREATORBUG-13011 "QtCreator fails to parse QtWebKit\plugins.qmltypes")によるとどうやらQtの不具合らしいですが、警告が出てくるだけなので無視してよさそうです。
　因みに、下記のファイルを削除すればでなくなりました。気になる場合は削除しても良さそうです。

　　N:\Qt\5.4\mingw491_32\imports\QtWebKit\plugins.qmltypes

### 2.3.2 デプロイ準備の自動化(オプション)
　ここまででビルドできるのですが、ついでにデプロイ準備を自動化してみました。
　ライセンスの関係などで動的リンクで開発し、それをデプロイしたいケースもあると思います。その際に必要なdllをかき集めてくるツール[windeployqt.exe](http://relog.xii.jp/mt5r/2014/04/windowsqtwindeployqtexe.html "[理ろぐ] WindowsでQtアプリの配布パッケージを作る（windeployqt.exeを使ってみた）")がQtには付属しています。これをプロジェクトから呼び出すように設定しておけば、自動的にデプロイの準備ができます。
　そのためにはプロジェクトにwindeployqt.exeを呼び出すバッチ・ファイルを設定します。左側ペインの真ん中付近にある`[プロジェクト]`ボタンを押して下さい。次の画面になります。

![08.Deploy準備.png](https://qiita-image-store.s3.amazonaws.com/0/59362/4d4557e3-3c8c-3cad-5420-e17dd4ee30c3.png)

　デプロイは通常はリリース・ビルドで行いますので、①のところをクリックして`[リリース]`に切り替えます。
　次に②のところの`[ビルドステップを追加]`を押して、`[独自プロセスステップ]`を追加します。
　最後に③のところで、コマンドにN:\Qt5\tools\deploy.bat、引数に%{sourceDir}を設定します。
　以上により、リリース・ビルドの最後で`<アプリのビルド・フォルダ>\deploy`フォルダへ必要なファイルを集めます。

```text:Note
rockomizさんから頂いたコメントで気が付きました。deploy.batの由来が分かりにくいですね。(rockomizさん、お問い合わせありがとうございます。)
これは、後述の「deploy.batの重要部」を参考に作成して下さい。
また、「1.1 やったこと」に書いている「便利バッチ・ファイル」の中にも入れています。
```

　とと、ここでTasukuさんからコメントを頂きましたっ。
　それでやっと気がついたのですが、キット名の下にある`[ビルド]`と`[実行]`は、実はボタンです。(マウスを載せても反応しないし、気が付かなくても仕方ないよね？orz)
　`[実行]`を押すと次の画面が出てきます。うはっ、「デプロイ」ってあるじゃないですか！！

![18.Deploy準備2.png](https://qiita-image-store.s3.amazonaws.com/0/59362/be0358c9-04bb-9e3c-dcd3-9c87cbf960d1.png)

　`[デプロイ ステップを追加]`を押して、`[独自プロセスステップ]`を追加します。
　そして、コマンドにN:\Qt5\tools\deploy.bat、引数に%{sourceDir}を設定します。

```text:Note
実行のところをみると、実行構成を設定できます。
追加ボタンがあるってことは、複数の実行構成を設定できるということですね。
いくつかのコマンドライン・パラメータを手軽に切り替えてデバッグ実行したいことってよくあると思います。これは便利そうです。
更に、[追加]ボタンで[カスタム実行ファイル]を選んで%{buildDir}\deploy\HelloWorld.exeとし、かつ、[環境変数なし]を選べば、deploy内のexeを実行環境により近い状態でデバッグ実行できる筈ですね。
```

　前者の場合、リリース・ビルド時にデプロイ準備します。
　後者の場合、リリースとデバッグの両方とも実行時にデプロイ準備します。
　必要に応じて使い分けて下さいな。

(↓デバッグ・ビルド対応のため修正しました。)

```bat:deploy.batの重要部
xcopy /C /Y debug\*.exe deploy\
xcopy /C /Y release\*.exe deploy\
windeployqt -qmldir %1 deploy
```

### 2.3.3 実行！！
　さて、いよいよビルドして実行します。
　左下の緑の三角を押して下さい。(緑の三角は2つありますが、どちらでも良いです。上はビルドして実行、下はビルドしてデバッガで実行します。因みに一番下のトンカチマークはビルドだけ行います。)
　無事、Hello Worldと表示されれば勝ちです。おめでとう！！　負けた方はご愁傷様です。何かが異なっています。一旦デプロイ設定を削除してみるとうまくいくかも知れません。

![07.Hello World.png](https://qiita-image-store.s3.amazonaws.com/0/59362/2a5a9430-d878-29ef-aece-a1c0dc3d94bd.png)

　そして、デプロイ設定していれば、下記フォルダ(HelloWorldの現在キットのビルド・フォルダ下のdeploy)に必要なexeとdllが集まっていますので、ここにあるHelloWorld.exeをダブルクリックして見てください。Hello Worldが表示される筈です。

![09.Deployフォルダ.png](https://qiita-image-store.s3.amazonaws.com/0/59362/ef9dd3c6-8740-cef2-1d2d-238a2e98f471.png)
　因みにdeployフォルダ内の全ファイルの合計サイズは約37MBytesでした。

---
　ここまでで、MinGW 32bitによるQtアプリ(動的リンク)を開発できるようになりました。
　長くなりましたので、今日はここで終わります。（Qtのビルドどこいった？　期待した方ごめんなさい。m(__)m)
　続きは[また明日](./acb465f388aa75f5d6a5 "Windows 7でQt5.4.0を64ビットでスタティック・ビルドする　その2(Qt5.4.0のビルド)")。(ちゃんちゃん)