Uma razão é que uma falha em um dos comandos de receita não seria detectada pelo GNU make . Apenas o status final de saída do shell seria dado a make . Teria que definir adicionalmente .SHELLFLAGS para -e para fazer com que o shell terminasse logo no início dos erros (isso é necessário para chamadas de shell multi-comando mesmo sem .ONESHELL se eles precisarem falharem em o primeiro erro).
Tudo isso é bom para quando SHELL é um shell POSIX. Um Makefile também pode definir SHELL como, por exemplo /usr/bin/perl ou algum outro interpretador de comandos. Pode então ser apropriado, ou não, usar .ONESHELL .
Tornar .ONESHELL o comportamento padrão em make poderia potencialmente quebrar Makefiles antigos.
Mesmo que esta não seja uma questão relacionada ao padrão POSIX ou a conformidade com esse padrão pelo GNU make , a Justificativa de a especificação POSIX para make tem a dizer sobre o problema em questão:
The default in some advanced versions of
makeis to group all the command lines for a target and execute them using a single shell invocation; the System V method is to pass each line individually to a separate shell. The single-shell method has the advantages in performance and the lack of a requirement for many continued lines. However, converting to this newer method has caused portability problems with many historical makefiles, so the behavior with the POSIX makefile is specified to be the same as that of System V. It is suggested that the special target.ONESHELLbe used as an implementation extension to achieve the single-shell grouping for a target or group of targets.
O GNU make é compatível com POSIX a esse respeito, pois implementa o comportamento do System V e fornece um .ONESHELL de destino para ativar o comportamento alternativo, se desejado. ... o que é outro motivo para o GNU make manter o comportamento atual.