Qt 6におけるビルドシステムの変更点
Qt 6 への多くの取り組みは、Qt およびそのモジュールのビルド方法に関連するものでした。その目的は、広く採用されている人気のあるビルドツールであるCMake へ移行することで、Qt を将来に備えたものにすることでした。
ソースからの Qt のビルド
Qt 5 のビルドシステムはqmake を基盤としていました。Qt 6 では、このビルドシステムを CMake へ移植しました。
注:これは 、ソースから Qt をビルドしたいユーザーにのみ影響します。アプリケーションのビルドツールとして qmake を引き続き使用することは可能です。
cmake を実行することで、コマンドラインから直接 Qt を設定することも可能です。ただし、より使いやすいインターフェースと追加のエラーチェック機能を備えたconfigureコマンドラインツールの使用を引き続き推奨します。
新しいconfigure APIの概要については、「Qt Configureオプション」も参照してください。
外部依存関係としての CMake、Ninja
Qt を設定およびビルドするには、最新のCMakeバージョンが必要です。Qt 6.0 では、CMake 3.16 が必要です。Qt 6.2 以降、Qt を静的ライブラリとしてビルドする際には、CMake 3.21が必要です。 Qt 6.6 以降、Apple プラットフォーム向けに Qt をビルドする際は、CMake 3.21.1が必要です。 Qt 6.9 以降では、CMake 3.22 が必要です。Qt 6.12 以降では、CMake 3.25 が必要です。また、Ninjaツールの最新バージョンがインストールされている必要があります。
CMake と Ninja はどちらもオープンソースのツールであり、さまざまな方法でインストールできます。また、Qt Online Installer からも入手可能です。
各プラットフォームにおけるビルド要件の詳細については、「Qt ソースのビルド」を参照してください。
Qt ライセンスの選択
Qt 5 では、configure コマンドの実行時に、Qt を商用ライセンスで使用するのか、オープンソースライセンスで使用するのかを選択する必要がありました。複数の商用ライセンスを保有している場合は、使用するライセンスを選択する必要もありました。
Qt 6では、これら両方の選択項目を削除しました。利用可能なライセンスの選択は、アーティファクトではなく、The Qt Companyとの法的契約内容によって決まります。
Qt 6 では、configure オプションの-opensource、-commercial、および-confirm-licenseは無視され、将来の Qt バージョンでは削除される可能性があります。
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 のタスクの一つは、環境内のさまざまなサードパーティ製パッケージの利用可能性を検出することです。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 ツール(moc や rcc など)が利用可能であることに加え、ターゲット向けにビルドされる Qt ライブラリも必要です。
Qt 5 では、configure を使用することで、ターゲット用のツールやライブラリだけでなく、ホスト用のツールも1つの手順でビルドすることができました。 Qt 6では、この機能はサポートされなくなりました。代わりに、ターゲット向けにQtをクロスコンパイルするには、ホストにQtがインストールされ、動作している必要があります。さらに、インストールされたQtは、クロスコンパイル対象となるバージョンと同じものでなければなりません。
クロスコンパイルの詳細については、「組み込みLinuxデバイスの設定」、「Qt for Android - ソースからのビルド」、および「Qt for iOS - ソースからのビルド」を参照してください。
Qtプラグインおよび追加ライブラリの移植
Qt アプリケーションのビルドには qmake が引き続きサポートされていますが、カスタム Qt プラグインや、Qt 5 ビルドシステムの内部機能に依存するライブラリのコンパイルには、もはや使用できません。このようなライブラリやプラグインは、Qt 6 で使用するために CMake へ移植する必要があります。
Qt 6.0のリリース時点では、カスタムQtプラグインやライブラリをビルドするためのAPIは依然としてテクニカルプレビュー段階にあり、将来のバージョンで変更される可能性があります。一般公開用の安定版APIは、今後のQt 6のリリースで提供される予定です。
関連トピック
- Qt 6 における Qt モジュールの変更点- Qt モジュールにおける API の変更点のリスト
- サポート対象モジュールの変更点- Qt 6.0におけるQt 5モジュールの状況
- Qt 5 と Qt 6 の互換性- Qt 5 と Qt 6 の両方でアプリケーションをビルドする
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.