私はGCC4.7を使用しており、C++コードプロジェクトをコンパイルしています。コードは、ディレクトリに分散されたファイルで構成されています。
私が使用しているRHELサーバーには16コアがありますが、それでもコンパイル速度はかなり遅いです。makefileの可能な代替案またはオプションを提案できますか?これは高速コンパイルに役立つ可能性があります。-jを試しましたが、一部のフォルダーのみをコンパイルして停止します。メインバイナリをコンパイルしません。
どんな助けにも感謝します。
私はGCC4.7を使用しており、C++コードプロジェクトをコンパイルしています。コードは、ディレクトリに分散されたファイルで構成されています。
私が使用しているRHELサーバーには16コアがありますが、それでもコンパイル速度はかなり遅いです。makefileの可能な代替案またはオプションを提案できますか?これは高速コンパイルに役立つ可能性があります。-jを試しましたが、一部のフォルダーのみをコンパイルして停止します。メインバイナリをコンパイルしません。
どんな助けにも感謝します。
を使用してコンパイルしたときにmakefileが失敗した-j
が、それがなくても正常に機能する場合は、並列コンパイルで正しく機能するようにmakefileを修正する必要があります。それ以外の場合、これらの他の15コアは役に立ちません。
経験の浅いmakefileライターが次のようなものを書くことは珍しいことではありません。
final: step1 step2 step3
「finalをビルドするには、最初にstep1をビルドし、次にstep2をビルドし、次にstep3をビルドする」という意味です。これは、デフォルトの設定で実行している場合に正常に機能します。これは-j 1
、make
各依存関係を左から右の順序で構築するためです。しかし、-j 20
(たとえば)を使用すると、それらを並行して構築しようとします。連続する各ステップが完了するまで最初に待機することなく、3つのステップすべての構築を一度に開始しようとします。
これを書く正しい方法は次のとおりです。
final: step3
step3: step2
step2: step1
これはmake
、何が起こっているかを正確に示しています。ビルドするには、final
最初にビルドする必要があり、step3
必要なstep2
もの、必要なものがありますstep1
。