Was sind die Gründe dafür, dass jede Zeile in Makefile in einer separaten Shell ausgeführt wird?

7

Jeder Befehl in Makefile wird von einer separaten Shell ausgeführt .

Was ist der Grund dafür? Warum werden Befehle nicht wie in einem normalen Skript ausgeführt? Mir ist bewusst, dass es möglich ist, eine Shell mit einem .ONESHELLspeziellen Ziel zu verwenden.

Aber was sind die Gründe für das Standardverhalten?

Maxime
quelle

Antworten:

3

Ich kann Ihnen die Gründe für die Hersteller nicht sagen, aber eine Shell pro Rezeptzeile macht für mich Sinn, da nur ein Status beibehalten und geändert werden muss, und das ist der Status im Erstellungsprozess. Außerdem stellt eine neue Shell pro Zeile sicher, dass jede Zeile bei jeder Ausführung dasselbe tut. Wenn es immer die gleichen Shell-Rezeptzeilen wären und sogar ganze Rezepte Nebenwirkungen aufeinander haben könnten und der Herstellungsprozess praktisch keine Methode hat, um zu erkennen, was wünschenswert ist und was nicht ... geschweige denn, dieses Verhalten zu kontrollieren. Eine Shell pro Zeile macht jede Zeile atomar und der Programmfluss wird zurückgegeben, um zu erstellen, was viel mehr Leistung gibt.

Bananguin
quelle
2

Ich vermute, der Grund dafür ist, dass "make" normalerweise anhält, wenn ein Fehler auftritt. Wenn Sie also drei separate Befehle haben, ist es möglicherweise ratsam, sofort anzuhalten, wenn Befehl 1 fehlschlägt.

user45404
quelle