Unity ビルド
Unity ビルドは、ビルド時間を短縮する手法です。仕組みは比較的単純です。src1.c
、src2.c
、および src3.c
のソースファイルがあるとします。通常は、ファイルごとに 1 回ずつ、コンパイラを 3 回実行します。Unity ビルドでは、これらのすべてのソースを 1 つのユニットでコンパイルします。最も簡単な方法は、次のような新しいソースファイルを作成することです。
#include<src1.c>
#include<src2.c>
#include<src3.c>
その後、個別のファイルではなく、これをコンパイルします。正確な高速化はコードベースに依存しますが、コンパイル時間の 50% 以上が高速化されることは珍しくありません。Unity ビルドは単一の CPU のみを使用するのに対し、個別のコンパイルは並列で実行できるにもかかわらず、この現象は発生します。Unity ビルドはコードも高速化される可能性があります。コンパイラはより積極的な最適化(インライン展開など)を実行できるためです。
欠点は、増分ビルドがフルビルドと同じくらい遅くなることです(それ自体がフルビルドであるためです)。Unity コンパイルはより多くのメモリも使用するため、特定のシナリオで問題になる可能性があります。Unity コンパイルが機能する前に修正する必要がある、ソースにバグがある場合もあります。たとえば、src1.c
と src2.c
の両方に同じ名前の静的関数または変数が含まれている場合、衝突が発生します。
Meson には Unity ビルドのサポートが組み込まれています。有効にするには、コマンドラインで --unity on
を渡すか、プロジェクトの default_options で Unity ビルドを有効にします。上で説明した衝突の問題を除き、コードを変更する必要はありません。Meson は、必要なインクルードファイルをすべて自動的に生成します。
override_options
パラメータを使用して、特定のビルドターゲットの Unity 設定を変更できます。ビルドターゲットが Unity ビルドと互換性がない場合に役立ちます。
unity
オプションは subprojects
を値としてとることもでき、メインプロジェクトを増分ビルドしながらサブプロジェクトを Unity でビルドできます。
unity_size
オプションでは、Unity ファイルに含めるソースファイルの数を指定できます。デフォルトは 4 です。1 つの Unity ファイルあたりのソースファイルが多いと、完全ビルドは高速化されますが、増分ビルドは低速化されます。ビルドターゲットごとに 1 つの Unity ファイルのみを取得するには、unity_size
に非常に大きな数字を使用できます。
検索結果は次のとおりです。