Se você realmente quer "escrever exatamente scripts bash em Makefiles", então você precisará fazer isso um pouco indiretamente. Se você acabou de colar o script após a linha de destino, você terá dois problemas que não podem ser ignorados: as linhas de comando precisam ser recuadas com uma tabulação e os cifrões precisam ser escapados.
Se você usa o GNU make (ao contrário do BSD make, Solaris make, etc.), então você pode definir seu script como uma variável usando o sintaxe de definição de várias linhas e, em seguida, use o value
function para usar o valor bruto da variável, ignorando a expansão.
Além disso, conforme explicado por skwllsp , você precisa informar ao make para executar a lista de comandos para cada destino como um script de shell único em vez de linha por linha, o que você pode fazer no GNU make por definindo um .ONESHELL
target .
define my_important_task =
# script goes here
endef
my-important-task: ; $(value my_important_task)
.ONESHELL: