IT徒然草

IT関係のことを解説したり一人つらつら書いたり

make -jの値には何を指定するべき?それと注意事項。

make のjオプションについて

make -j2

上記のように、makeコマンドに-jオプションとプロセスの数を指定すると、 複数のスレッドでビルドされることになり、コンパイルやビルドの処理速度が向上します。 上記の例では、スレッド数を2つにして実行しています。 ggると、jオプションに指定する数の関係で議論になっています。

nprocとセットで実行!

こういったときに役立つのが、「nproc」コマンドです。 nprocは、利用可能なプロセス数を返すコマンドです。これをセットで

make -j$(nproc)

とすることで、動的に最適な数を指定できます。

jオプションを指定するとまれにコンパイルが失敗する可能性も

一つ注意しておきたいのは、jオプションを指定するとまれにコンパイルが失敗する可能性があるということです

例えば、Aターゲットは、コンパイル用、BターゲットはAに依存されている翻訳用のファイルを生成するターゲットであるとしましょう。

Bターゲット(翻訳生成)
↓
Aターゲット(コンパイル)

jなしで実行した場合は上記のように実行しますが、並列ビルドすると

Bターゲット      Aターゲット
           ↓

       エラー

このように、翻訳ファイルができる前にコンパイルが開始してしまうと、エラーが発生してしまいます。 すべてのソフトやアプリで起きるとは限りませんが、このようなことが起きてもおかしくありません。 実際、筆者もこれでハマった一人ですwww

(C)2020 EnjoySoftware All rights reserved.