ネストされた階層を持つ一連の共有ライブラリとして設定された (C++) プログラムがあります。つまり、libB.so は libA.so からの関数を使用するため、libA.so に対してリンクし、libC.so は libB.so と libA.so の両方からの関数およびリンクを使用します。
現在の CMake+Ninja ビルド システムでは、並列ビルドがライブラリ間で行われていないように見えることに気付きました。つまり、Ninja は通常 12 コアを使用してビルドしますが、libA から 1 つのソース ファイルに触れ、libC では複数のソース ファイルに触れた場合、ninja は libA.so がリンクされるまで、libA ソース ファイルだけをビルドするために 1 つのプロセッサのみを使用します。その時点で、12 個のプロセッサを使用して libC ソース ファイルをコンパイルします。- また、libA ソースのコンパイルでエラーが発生した場合、ninja に -k を渡しても、libC ファイルをオブジェクト ファイルにコンパイルしようとさえしません。
確かに、libC.so のリンクは、libA.so がリンクされるまで遅らせる必要がありますが、libC ソースのオブジェクト ファイルへのソース ファイルのコンパイルは、libA のリンクのために遅らせる必要はありません。
ライブラリ間の依存関係を表現するために CMake ファイルを設定する最適な方法について、私が見逃しているものはありますか? それとも、これは忍者の仕組みの克服できない制限ですか?