Eu suspeito que o motivo é que "make" normalmente pára se houver um resultado de erro. Então, se você tiver 3 comandos separados, pode ser sensato parar imediatamente se o comando # 1 falhar.
Cada comando no Makefile é executado por um shell separado.
Qual é o motivo disso? Por que os comandos não são executados como em um script regular? Estou ciente de que é possível usar um shell usando .ONESHELL
target especial.
Mas quais são as razões para o comportamento padrão?
Eu suspeito que o motivo é que "make" normalmente pára se houver um resultado de erro. Então, se você tiver 3 comandos separados, pode ser sensato parar imediatamente se o comando # 1 falhar.
Eu não posso te dizer a razão dos fabricantes de make, mas um shell por linha de receita faz sentido para mim em que há apenas um estado a ser mantido e modificado e esse é o estado no processo de make. Além disso, um novo shell por linha garante que cada linha faça a mesma coisa toda vez que for executada. Se sempre foram as mesmas linhas de receita de casca e até mesmo receitas inteiras podem ter efeitos colaterais umas sobre as outras e o processo de fabricação não tem praticamente nenhum método de detectar o que é desejável e o que não é ... e muito menos controlar esse comportamento. Um shell por linha faz com que cada linha atômica e fluxo de programa seja retornada para fazer, o que dá muito mais poder para fazer.
Tags make