Qt 6 におけるビルドシステムの変更

Qt 6 で行われた作業の多くは、Qt とそのモジュールのビルド方法に関するものでした。目標は、広く採用されている一般的なビルドツールに移行することで、Qtを将来的にも使えるようにすることでした:CMakeです。

ソースからの Qt のビルド

Qt 5 のビルドシステムはqmake の上に構築されました。Qt 6 では、ビルドシステムを CMake に移植しました。

注意: これはソースからQtをビルドしたいユーザーにのみ影響します。アプリケーションのビルドツールとして qmake を使用することは可能です。

コマンドラインからcmake を起動し、Qt を直接設定することも可能です。しかし、私たちはconfigureコマンドラインツールを推奨しています。

新しい configure API の概要についてはQt Configure Optionsも参照してください。

CMake、外部依存としてのNinja

Qt の configure とビルドには、最近のバージョンのCMakeが必要です。Qt 6.0ではCMake 3.16が必要です。Qt 6.2以降、Qtをスタティックライブラリとしてビルドする場合はCMake 3.21が必要です。Qt 6.6以降、Appleプラットフォーム向けにQtをビルドする場合はCMake 3.21.1が必要です。また、Ninjaツールの最新版がインストールされている必要があります。

CMakeとNinjaはどちらもオープンソースのツールで、様々な方法でインストールすることができます。また、Qt Online Installerでも入手できます。

異なるプラットフォームでのビルド要件の詳細については、Qtソースのビルドを参照してください。

Qt ライセンスの選択

Qt 5 では、configure で Qt を商用ライセンスとオープンソースライセンスのどちらで使用するかを選択する必要がありました。複数の商用ライセンスがある場合は、使用するライセンスも選択する必要がありました。

Qt 6 では両方の選択を削除しました。利用可能なライセンスの選択は、アーティファクトではなく、Qt Company との法的な契約によって決まります。

configure オプションの-opensource,-commercial,-confirm-licenseは Qt 6 では無視されます。

configure の再実行

異なる configure オプションをテストするために configure を再実行したいことがあります。Qt 5では、configureは実行の間に環境から様々な情報をキャッシュしていましたが、それ以外はクリーンな状態から開始していました:以前の実行時の引数を再利用するには、-redoを使うか、config.statusシェルスクリプトを使う必要がありました。また、-recheck,-recheck-allオプションを使用することで、キャッシュされたテストの再評価を行うことができます。

Qt 6 の CMake と configure は、さらに積極的に結果をキャッシュします。検出された環境設定や、その他のコマンドライン引数による選択は、CMakeCache.txtというファイルに保存されます。新しいオプションを指定して configure を実行すると、新しいオプションはこのファイルにマージされます。このファイルを削除して、最初からやり直してください。上記の configure オプションはもうサポートされていません。

Qt の一部だけをビルドする

Qt 5 のビルドシステムでは、ビルドツール(例えばmake )をサブディレクトリで実行し、部分的な再ビルドを行うことができました。

CMakeは異なるパラダイムに従い、ビルド全体を考慮してトップレベルのディレクトリからターゲットをビルドする必要があります。ビルドで利用可能なすべてのターゲットを確認するには、ninja -t targetsを使用してください。

サードパーティライブラリの解決

configureのタスクの1つは、環境内のさまざまなサードパーティパッケージの可用性を検出することです。Qt 5 では、configure はオプションで pkg-config を使用していましたが、様々なコンパイル時テストも使用していました。これらのチェックはコマンドラインからICU_PREFIXや ICU_LIBSなどの様々な代入で調整することができました。

Qt 6では、configureは依存関係を解決するためにCMakeに依存しています。ほとんどの依存関係では、サードパーティライブラリがCMakeの検索パスにCMakeパッケージを提供する必要があります。CMAKE_PREFIX_PATH 変数を使うことで、このパスをカスタムロケーションで拡張することができます。

OpenSSL のようないくつかの依存関係は、CMake 内のロジックによっても検出されます。OpenSSL が検出されない場合は、OPENSSL_ROOT_DIR CMake 変数がインストールディレクトリを指すように設定する必要があるかもしれません。

ツールチェーンの選択

Qt 5 では、configure はいわゆる mkspecs を使ってビルドとターゲットプラットフォームの両方を指定しました(-platform-xplatform-deviceオプション)。CMakeはこれらを使用せず、環境チェックとツールチェーンファイル(CMake-toolchainsドキュメントも参照してください)に依存します。platform、-xplatformオプションはまだ使用できますが、生成されるqmakeツールのデフォルトを設定するためだけに使用されます。

Qt のクロスコンパイル

クロスコンパイルとは、あるコンピュータシステム(ターゲット)用のコードを別のシステム(ホスト)でコンパイルすることです。Qt アプリケーションをクロスコンパイルするためのビルド環境では、Qt ライブラリをターゲット用にビルドするだけでなく、ホスト上で Qt ツールを利用できるようにする必要があります(moc や rcc を思い出してください)。

Qt 5 では、configure により、ホストのツールだけでなくターゲットのツールやライブラリも 1 ステップでビルドできました。Qt 6 では、これはサポートされなくなりました。その代わりに、Qt をターゲットにクロスコンパイルする前に、ホスト上で Qt がインストールされ、動作している必要があります。インストールされている Qt は、クロスコンパイルするものと同じバージョンでなければなりません。

クロスコンパイルの詳細については、Configure an Embedded Linux DeviceQt for Android - Building from SourceQt for iOS - Building from Source を参照してください。

Qt プラグインと追加ライブラリの移植

qmake は Qt アプリケーションのビルドではまだサポートされていますが、カスタムの Qt プラグインや Qt 5 ビルドシステムの内部に依存するライブラリのコンパイルには使用できません。そのようなライブラリやプラグインは、Qt 6 で使用するために CMake に移植する必要があります。

Qt 6.0 のリリース時点では、カスタム Qt プラグインやライブラリをビルドするための API はまだ技術プレビューであり、将来のバージョンで変更される可能性があります。パブリックな安定版 API は、後の Qt 6 リリースで利用可能になる予定です。

©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権はそれぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。