Makefile中的每一行在单独的shell中执行的原因是什么?

Max*_*xim 8 shell make

Makefile 中的每个命令都由单独的 shell 执行

这是什么原因?为什么命令不像在常规脚本中那样执行?我知道可以使用.ONESHELL特殊目标使用一个 shell 。

但是默认行为的原因是什么?

Ban*_*uin 3

我无法告诉你制作者的基本原理,但每个配方行一个外壳对我来说是有意义的,因为只有一种状态需要保留和修改,那就是制作过程中的状态。此外,每行一个新的 shell 可确保每行每次执行时都执行相同的操作。如果它总是相同的外壳配方行,甚至整个配方可能会相互产生副作用,并且制作过程实际上没有方法检测什么是所需的,什么不是……更不用说控制这种行为了。每行一个 shell 使每行原子化,并且程序流返回到 make,这为 make 提供了更多的功能。