0

私はGCC4.7を使用しており、C++コードプロジェクトをコンパイルしています。コードは、ディレクトリに分散されたファイルで構成されています。

私が使用しているRHELサーバーには16コアがありますが、それでもコンパイル速度はかなり遅いです。makefileの可能な代替案またはオプションを提案できますか?これは高速コンパイルに役立つ可能性があります。-jを試しましたが、一部のフォルダーのみをコンパイルして停止します。メインバイナリをコンパイルしません。

どんな助けにも感謝します。

4

1 に答える 1

5

を使用してコンパイルしたときにmakefileが失敗した-jが、それがなくても正常に機能する場合は、並列コンパイルで正しく機能するようにmakefileを修正する必要があります。それ以外の場合、これらの他の15コアは役に立ちません。

経験の浅いmakefileライターが次のようなものを書くことは珍しいことではありません。

final: step1 step2 step3

「finalをビルドするには、最初にstep1をビルドし、次にstep2をビルドし、次にstep3をビルドする」という意味です。これは、デフォルトの設定で実行している場合に正常に機能します。これは-j 1make各依存関係を左から右の順序で構築するためです。しかし、-j 20(たとえば)を使用すると、それらを並行して構築しようとします。連続する各ステップが完了するまで最初に待機することなく、3つのステップすべての構築を一度に開始しようとします。

これを書く正しい方法は次のとおりです。

final: step3
step3: step2
step2: step1

これはmake、何が起こっているかを正確に示しています。ビルドするには、final最初にビルドする必要があり、step3必要なstep2もの、必要なものがありますstep1

于 2012-04-05T13:16:42.110 に答える