再帰makeと-jオプションの知られざる挙動

Recursive `make` and `-j`

Makefileのレシピ内でmakeを再帰的に呼び出す際、-jオプションが正しく伝播しない問題を検証。GNU Make 3.81から4.3までの挙動を比較し、+接頭辞や$(MAKE)を使うことで並列実行を維持できることを示す。ただし、-jNをサブメイクで強制するとjobserverモードが無効になる警告が残るなど、完全な解決は難しい。

「jobserverが利用できません:-j1を使用します。親のmakeルールに'+'を追加してください。」
  1. stabbles

    `-j`はトップレベルの呼び出しにのみ使うことを意図しており、$(MAKE)パターンは標準的です。

    サブmakeやその他のサブプロセスでジョブサーバーを継承させるための`+`や$(MAKE)の「トリック」は、gmake 4.4(2022年以降)では不要になりました。デフォルトでパイプではなくFIFOを使うようになったからです。著者はただgmakeをアップグレードすればいいだけです :)

  2. fragmede

    やめておけ!

    https://accu.org/journals/overload/14/71/miller_2004/

    再帰Makeは有害と考えられる

    ピーター・ミラー著

この日のほかの記事

2026-09-30