アプリケーションのパッケージング
各プラットフォームごとに、スタンドアロンアプリケーションを構築するために必要なすべてのタスクを実行するための専用スクリプトを作成していただきます。OSの種類に応じて、パッケージ化されたアプリケーションはgallery-desktopかgallery-mobileになります。ギャラリープロジェクト全体をコンパイルする必要があるため、gallery-coreも含まれている必要があります。そのため、gallery-core、gallery-desktop、gallery-mobileを含む親プロジェクトを作成します。
各プラットフォームごとに、パッケージ化するプロジェクトを準備し、特定のスクリプトを作成します。すべてのスクリプトは同じワークフローに従います。
- 入力ディレクトリと出力ディレクトリを設定します。
- qmakeでMakefileを作成します。
- プロジェクトをビルドします。
- 必要なファイルだけを出力ディレクトリに再グループ化する。
- アプリケーションをプラットフォーム固有のタスクでパッケージ化する。
- パッケージ化したアプリケーションを出力ディレクトリに格納します。
これらのスクリプトは、パッケージ化するコンピュータの OS がスクリプトのターゲット OS と一致していれば、開発者用のコンピュータや Jenkins のようなソフトウェアを実行している継続的インテグレーションサーバ上で実行することができます (モバイルプラットフォームを除く)。言い換えれば、Windows 用の Qt アプリケーションをパッケージ化するには、Windows が動作するコンピュータ上で Windows スクリプトを実行する必要があります。
技術的には(適切なツールチェーンとライブラリがあれば)クロスコンパイルを行うことができますが、それはこの本の範囲を超えています。LinuxであればRaspberryPIのためのクロスコンパイルは簡単ですが、MacOSのためにコンパイルしたい場合とWindowsのためにコンパイルしたい場合では同じことは言えません。
Info
Linuxからは、http://mxe.cc/ にあるMXEなどのツールを使って、Windows用のQtをクロスコンパイルすることができます。
ch13-gallery-packagingという名前の新しいサブディレクトリを作成し、以下の階層を持つプロジェクトを作成します。
- ch13-gallery-packaging:
- gallery-core
- gallery-desktop
- gallery-mobile
Qtのサブディレクトリプロジェクトのエキスパートになった人でも、ここではch13-gallery-packaging.proファイルを紹介しています。
TEMPLATE = subdirs
SUBDIRS += \
gallery-core \
gallery-desktop \
gallery-mobile
gallery-desktop.depends = gallery-core
gallery-mobile.depends = gallery-core
これで、ターゲットとしているプラットフォームに応じて、以下のセクションのいずれかで作業する準備が整いました。