Makefileの各行を別々のシェルで実行するのはなぜですか?

Makefileの各行を別々のシェルで実行するのはなぜですか?

Makefileの各コマンドは、別々のシェルによって実行されます。

その理由は何ですか?コマンドが通常のスクリプトのように実行されないのはなぜですか?.ONESHELL特別なターゲットにシェルを使用することが可能であることを知っています。

しかし、基本的な動作の理由は何ですか?

答え1

私は、その理由が間違った結果が発生した場合、通常「make」が停止するためだと思います。したがって、3つの個別のコマンドがある場合は、コマンド#1が失敗したらすぐに停止するのが賢明かもしれません。

答え2

製作者の根拠を申し上げることはできませんが、保存して修正しなければならない状態が一つだけであり、それが製作中の状態なのでレシピラインごとに一つの殻が理解になります。また、行ごとに新しいシェルを使用すると、各行が実行されるたびに同じ操作を実行できます。常に同じクラストレシピラインである場合は、レシピ全体が互いに副作用を持つ可能性があり、製造中に実際に望むものとそうでないことを検出する方法はありません。コントロールは言うまでもありません。この行動。 1行に1つのシェルが各行を噴霧し、作成するプログラムフローを返すので、より多くの機能を作成できます。

関連情報