再帰makeと-jオプションの知られざる挙動
Recursive `make` and `-j`
Makefileのレシピ内でmakeを再帰的に呼び出す際、-jオプションが正しく伝播しない問題を検証。GNU Make 3.81から4.3までの挙動を比較し、+接頭辞や$(MAKE)を使うことで並列実行を維持できることを示す。ただし、-jNをサブメイクで強制するとjobserverモードが無効になる警告が残るなど、完全な解決は難しい。
「jobserverが利用できません:-j1を使用します。親のmakeルールに'+'を追加してください。」
- stabbles
`-j`はトップレベルの呼び出しにのみ使うことを意図しており、$(MAKE)パターンは標準的です。
サブmakeやその他のサブプロセスでジョブサーバーを継承させるための`+`や$(MAKE)の「トリック」は、gmake 4.4(2022年以降)では不要になりました。デフォルトでパイプではなくFIFOを使うようになったからです。著者はただgmakeをアップグレードすればいいだけです :)
- fragmede
やめておけ!
https://accu.org/journals/overload/14/71/miller_2004/
再帰Makeは有害と考えられる
ピーター・ミラー著