makeに ‘-j’なんて便利なオプションがあったなんて…

[Comp] make -j で高速化 – Gom雑記帳 (2009-01-20)
で知ったのですが、gnu makeには ‘-j' というオプションがあり、このオプションを使うとMakefileに従った処理のうち、依存関係が無く直列に処理しなくても済む部分を複数のプロセスを生成し並行に処理するようです。引数は生成するプロセス数の上限を指定します。

私の環境ははQ6600なので”mingw32-make -j 5″で試みたのですが、'-j 5'無しだと20分33秒だったコンパイルが、7分53秒と1/3程度になりました。
知っている人にとっては当たり前のでしょうけど、これでさらにコンパイル時間が短くなるのは嬉しいですね。

ただ、「依存関係があるはずのgettextの作成を飛ばした?」という情報もあるので、注意は必要かもしれません。
一応-jありと無しとで生成された最終バイナリを比較して差異はなかったのでたぶん大丈夫だとは思いますが。

コメント

  1. Gom より:

    うちの環境では -j 8 で1回だけ失敗したことがありました。
    再現しないので原因がいまいちよくわかりません…^^;

  2. MNN より:

    プロセス数の制限無しでやってみたけど、こちらも1回失敗しました。

    mingw32-make: *** [obj/windows/mamepuinodll/mame/drivers/gladiatr.o] Error 1
    mingw32-make: *** Waiting for unfinished jobs….

    というエラーが出た後に、make自体が異常終了しています。
    エラーの詳細がでないので何が原因かはわかりませんが、コンパイル関係のプロセスが200個くらい立ち上がっていたので、もしかしたらテンポラリ関係のファイルでもかち合ったのですかね…

タイトルとURLをコピーしました