• 締切済み

makeがコマンド1行ごとに別々のサブシェルを起動する理由

 makeを使っていると、コマンドでfor文とかcdを使うときに';'で次のコマンドと連結してやる必要がありますが、シェルスクリプトでは';'で連結してやらなくても逐次実行になるのに、どうしてmakeではコマンドが行ごとに別々のサブシェルで処理するように設計されているんでしょうか?何か速度が向上したりするんでしょうか?

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

make の仕様を確認したわけではないんですが, 別々のシェルで処理することによってエラーがなるべく早い段階でわかるようにしているんじゃないでしょうか? 1個のシェルで逐次実行すると, 途中でエラーが出てもシェルが終了しない (さらに, 最後のコマンドが 0 を返すとシェルも make に対し 0 を返してしまう) かも. それに対し, 別々のシェルで処理すれば, 確実にエラーが起きたところで止めることができます.

bobviv
質問者

補足

 回答をいただき有難うございます。趣旨はよく分かりましたが、現実には私の環境では例えばcd /nowhereとやってわざと失敗させてもmakeの処理は停止しません。できれば、makeがエラーを検出した時点でコマンド処理を停止するようにする方法も教えて頂けると幸いです。  GNU Make 3.81