Quais são as razões para cada linha no Makefile ser executada em um shell separado?

7

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?

    
por Maxim 04.12.2012 / 11:53

2 respostas

2

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.

    
por 10.10.2013 / 06:30
1

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.

    
por 04.12.2012 / 14:09

Tags