web-dev-qa-db-ja.com

Ubuntuアプリ(make、cmake、gcc)のコンパイルを高速化する方法

ここでいくつかのプログラムをコンパイルしていますが、4つのコアがあります。 makecmake、またはgccにすべてのコアまたは影響を与える何かを使用してコンパイルするように指示する方法はありますか?

11
Luis Alvarado

パッケージでサポートされている場合、-jフラグを使用して、並列ジョブの実行を許可できます。例:

make -j8

このフラグの詳細については、Stackoverflowの質問 を参照してください。使用可能なコアの数よりも大きい数を渡すと-jのパフォーマンスが向上するのはなぜですか

分散コンパイル

複数のマシンがある場合は、 distcc を試してください。関連するマシンでは、Sudo apt-get install distcc。ビルドマシンが192.168.1.1であると仮定します。

  • ヘルパーマシンで、次を実行します。

    Sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • ビルドマシンで、configureまたはcmakeを実行する前に、ビルドプロセスに使用するホストを指定する必要があります。オプションで、スラッシュの後に同時ジョブの数を指定します(デフォルトは4):

    export DISTCC_HOSTS='localhost/4 192.168.1.2/8 192.168.1.3/8'
    

    コンパイラーにdistccを使用させます:

    export PATH="/usr/lib/distcc:$PATH"
    

    ここで、configureまたはcmakeアプリケーションを作成し、次を使用してビルドします。

    make -j$(distcc -j)
    

    /usr/lib/distccをPATHに2回入れた場合、失敗することに注意してください。 PATH/usr/lib/distccを1回だけ設定してください。

詳細については、 distcc(1) および distccd(1) のマニュアルページを参照してください。

13
Lekensteyn