最適化された Qt のビルド
このページでは、特定のニーズに合わせて、より軽量でカスタマイズされた Qt を設定し、ビルドする手順について説明します。
ステップ 1: ソースコードの入手、ビルドに必要な依存関係のインストール、および環境の設定
ソースコードの入手、依存関係のインストール、および環境設定については、各プラットフォーム固有の手順を参照してください:
- Windows 向け Qt - ソースからのビルド
- macOS 向け Qt - ソースからのビルド
- Linux 版 Qt - ソースからのビルド
- 組み込みLinuxデバイスの設定
- Android 向け Qt - ソースからのビルド
- iOS向けQt - ソースからのビルド
ステップ 2: Qt ライブラリとツールのビルド
プラットフォーム固有の手順に従い、以下のQt 設定オプションを使用して、ニーズに合わせて最適化されたビルドを作成してください。
次の表では、ビルドサイズを縮小するのに役立つ configure オプションについて、より詳しく説明しています。
| Qt の configure オプション | 説明 |
|---|---|
| -static | 静的リンク用のアーカイブファイルを生成します。 静的バイナリは、必要なすべてのライブラリおよび依存関係が実行ファイル自体に組み込まれた状態でリンクされます。つまり、プログラムを実行する際には、外部のライブラリに依存するのではなく、必要なライブラリの内部コピーが使用されます。これにより、リンカーはバイナリコードの不要な部分を削除できるようになります。これは、単一の実行ファイルとして配布する場合に最適な解決策です。 |
| -ltcg | リンク時最適化(LTO)は、リンク段階でバイナリコードを分析・最適化することで、実行ファイルのパフォーマンスを大幅に向上させ、サイズを縮小できる強力な技術です。 |
| -reduce-exports | エクスポートされるシンボルの数を削減します。 |
| -gc-binaries | バイナリから不要な部分を削除します。各関数やデータ項目を個別のセクションに配置し、未使用のセクションに対するリンカーのガベージコレクションを有効にします。 |
| -submodules qtbase,qtdeclarative,qtqmlscriptcompiler,qtsvg | コンパイル対象のサブモジュール。依存関係を不要な機能に限定します。 |
| -skip qtlanguageserver,qtquicktimeline | コンパイルから自動的に含まれるサブモジュールを除外します。依存関係を不要な機能に限定します。 |
| -disable-deprecated-up-to <バージョン> | 非推奨の実装を削除します。 QT_DISABLE_DEPRECATED_UP_TO の値を<version>に設定します。QT_DISABLE_DEPRECATED_UP_TO は、APIおよびABIの両方から非推奨のメソッドを除外するために使用されます。<version>は16進数値です。 たとえば、Qt 7.0.0 またはそれ以前のリリースで非推奨となっているすべてのコードを除外するには、0x070000 を使用します。デフォルトでは、<version> は Windows では 0x040000、Windows 以外では 0x050000 に設定されています。 |
さらに、「機能の包含または除外」で説明されているように、機能を1つずつ削除することもできます。これにより、利用可能なコンポーネントや機能に制限が生じる可能性があります。すべての組み合わせがテストされているわけではありません。 Qt Test は、継続的インテグレーション(CI)システムにおいて、特定の最小限の configure オプションの組み合わせをテストしています。具体的には、高度に最小化された組み込み Linux 構成と、その他のプラットフォーム向けのやや最小化度が低い構成をテストしています。これらの構成は、Quick アプリケーションを実行するためのものです。
Qtのconfigureコマンドは、-- (ダブルダッシュ)というコマンドライン引数もサポートしており、これによりユーザーは-DCMAKE_CXX_FLAGS="-march=native"などの追加のCMake引数を指定できます。 クロスコンパイルの場合、これらのパラメータは、「ツールチェーンファイルの例」に記載されているように、`-DCMAKE_TOOLCHAIN_FILE=path/to/toolchain.cmake` を通じて追加できます。以下の表に、GCCで使用を検討できるオプションをいくつか示します:
| コンパイラオプション | 説明 |
|---|---|
| -march <arch> | ターゲットアーキテクチャ。アプリケーションがコンパイルされたのと同じアーキテクチャ上で実行される場合は「native」を使用します。 |
| -mtune <tune> | 指定されたプロセッサアーキテクチャの特性(命令セット、レジスタ数、キャッシュ階層など)を活かしたコードを生成するようコンパイラに指示します。 |
| -fno-asynchronous-unwind-tables | バイナリサイズを縮小します。非同期アンワインドテーブルを無効にすると、コードのパフォーマンス、互換性、保守性に影響を及ぼす可能性があることに注意してください。一般的に、このオプションは必要な場合にのみ、その潜在的な影響を慎重に検討した上で使用することが推奨されます。 |
| -fno-unwind-tables | バイナリサイズを縮小します。アンワインドテーブルを無効にすると、コードのパフォーマンス、互換性、保守性に影響を与える可能性があることに留意してください。通常、このオプションは、その潜在的な影響を慎重に検討した上で、必要な場合にのみ使用することが推奨されます。 なお、 |
| -fomit-frame-pointer | バイナリサイズを縮小します。このオプションを有効にすると、コンパイラは関数呼び出しごとにスタックにフレームポインタを格納しません。その代わりに、スタックポインタをフレームポインタとして使用するため、メモリを節約し、パフォーマンスを向上させることができます。 なお、GCC や Clang などの一部のコンパイラでは、ARM や PowerPC といった特定のアーキテクチャ向けにコンパイルする場合や、特定の最適化モードでは、デフォルトで `-fomit-frame-pointer ` が有効になっている点に留意してください。 |
| -fno-exceptions | バイナリサイズを縮小します。このオプションを有効にすると、コンパイラは try-catch ブロックのコードを生成せず、例外をスローまたはキャッチしようとする試みはすべて実行時エラーとなります。Qt 自体は例外なしで動作しますが、一部の依存関係では例外が必要になる場合があります。 |
| -no-pie | バイナリサイズを縮小します。一般的に、-fno-pie は、コンパイルされたコードの互換性やパフォーマンスに影響を与える可能性があるため、必要最小限に留め、慎重に使用する必要があります。位置独立実行ファイルはセキュリティ面でも利点があります。位置独立コードの詳細については、ウィキペディアの「アドレス空間配置のランダム化 (Address Space Layout Randomization)」を参照してください。 |
以下の表にリンカーオプションを一覧で示します:
| リンカオプション | 説明 |
|---|---|
| -no-pie | バイナリのサイズを縮小します。一般的に、-fno-pie は、コンパイルされたコードの互換性やパフォーマンスに影響を与える可能性があるため、必要最小限の場合にのみ、慎重に使用する必要があります。位置独立型実行ファイルはセキュリティも向上させます。位置独立型コードの詳細については、ウィキペディアの「アドレス空間配置のランダム化 (Address Space Layout Randomization)」を参照してください。 |
ステップ3:アプリケーションのビルド
Qtのインストールが完了したら、Qtを使用してアプリケーションのビルドを開始できます。
CMakeプロジェクトコマンドを使用して、QMLコード生成を最適化します。QMLコード生成の詳細については、「qt_add_qml_module」および「QMLとQt Quick のベストプラクティス」を参照してください。
以下の CMake コードスニペットにあるコマンドを実行すると、バイナリのサイズを小さくできます:
set_target_properties(
ExampleApp
PROPERTIES
QT_QMLCACHEGEN_ARGUMENTS "--only-bytecode"
)IDE からアプリケーションをビルドする場合は、そこで Qt のバージョンを明示的に登録する必要があります:
- Qt Creator については、Qt Creator: Qt バージョンの追加を参照してください。
- Qt Extension for Visual Studio Code については、Qt Extension for Visual Studio Code の「Qt バージョンの登録」を参照してください。
コマンドラインを使用してアプリケーションをビルドする場合は、プラットフォーム固有のガイドに従ってください。
© 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.