問題は、アプリケーションのビルドに時間がかかる (20 ~ 30 分) ことです。
約 5000 以上のファイルがあり、コードはさまざまなサブシステムに分割されており、個別にビルドできます。各サブシステムには、独自のメイクファイルがあります。
私の質問は次のとおりです。すべてのサブシステムが並行して構築され、その後メイクファイルを実行してそれらすべてをマージするように、メイクファイルごとにスレッドを作成することは可能ですか?
可能であれば、どのように進めますか?
問題は、アプリケーションのビルドに時間がかかる (20 ~ 30 分) ことです。
約 5000 以上のファイルがあり、コードはさまざまなサブシステムに分割されており、個別にビルドできます。各サブシステムには、独自のメイクファイルがあります。
私の質問は次のとおりです。すべてのサブシステムが並行して構築され、その後メイクファイルを実行してそれらすべてをマージするように、メイクファイルごとにスレッドを作成することは可能ですか?
可能であれば、どのように進めますか?
make の並列処理機能を使用できます。-j number
make を使用すると、レシピが同時に実行さnumber
れます。
詳細については、こちらを参照してください。
make -j
(TheMorphが言うように)使用することは間違いなく進むべき道です.
ただし、これは、単一の make プロセスでビルドの依存関係を確認し、何を並列化するかを判断できる場合に最適です。ただし、有害と見なされる再帰的な Makefile システムがあるようです(警告: リンクは PDF です)。
異なるサブシステム間の依存関係が最上位の make によって実際には理解されないため、再帰的な make を並行して実行することは一般に困難です。
したがって、最初に再帰的なメイクファイルを修正してから、-j
.
これは非再帰的な make システムを書く例です。現在あるすべてのディレクトリに引き続きメイクファイルがあり、各メイクファイルは引き続き同じターゲットを管理し、各サブディレクトリは引き続き個別に構築できることに注意してください。違いは、トップレベル ビルドではすべてのサブディレクトリ makefile が 1 つの依存関係グラフに含まれているため、より積極的に並列化できることです。