186

簡単な質問: 大規模なプロジェクトをより速くコンパイルするために、g++ がそれ自体の複数のインスタンスを生成できるようにするコンパイラ フラグは何ですか (たとえば、マルチコア CPU では一度に 4 つのソース ファイル)。

4

8 に答える 8

256

これは make で行うことができます - gnu make では -j フラグです (これはユニプロセッサ マシンでも役立ちます)。

たとえば、make から 4 つの並列ジョブが必要な場合:

make -j 4

パイプでgccを実行することもできます

gcc -pipe

これにより、コンパイル段階がパイプライン化され、コアをビジー状態に保つのにも役立ちます。

追加のマシンも利用できる場合は、distccを確認してください。これにより、それらのマシンにもコンパイルがファームアウトされます。

于 2009-01-05T22:26:05.730 に答える
45

そのようなフラグはありません。1 つあると、各ツールに 1 つの機能だけを実行させ、それを適切に実行させるという Unix の哲学に反します。コンパイラ プロセスの生成は、概念的にはビルド システムの仕事です。おそらく探しているのは、GNU make の -j (ジョブ) フラグです。

-j4 を作る

または、pmake または類似の並列 make システムを使用することもできます。

于 2009-01-05T22:25:57.557 に答える
12

人々は言及しましmakeたがbjam、同様の概念もサポートしています。を使用bjam -jxすると、bjam にx並行コマンドを作成するように指示されます。

Windows と Linux で同じビルド スクリプトを使用し、このオプションを使用すると、両方のプラットフォームでビルド時間が半分になります。良い。

于 2009-01-06T11:27:49.723 に答える
10

makeあなたのためにこれを行います。-jマニュアル ページでおよび-lスイッチを調べます。g++並列化できないと思います。

于 2009-01-05T22:24:56.670 に答える
7

distcc は、現在のマシンだけでなく、distcc がインストールされているファーム内の他のマシンにもコンパイルを配布するために使用できます。

于 2011-08-21T15:58:17.973 に答える
4

g++ についてはよくわかりませんが、GNU Make を使用している場合は、「make -j N」(N は make が作成できるスレッドの数) を使用すると、make で複数の g++ ジョブを同時に実行できます (非常に長い)ファイルは互いに依存していないため)。

于 2009-01-05T22:25:31.940 に答える