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