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

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

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

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

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

答案1

我怀疑原因是如果出现错误结果,“make”通常会停止。因此,如果您有 3 个单独的命令,那么在命令 #1 失败时立即停止可能是明智之举。

答案2

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

相关内容