Seu echo é um daqueles que interpreta escapes de barra invertida . Um \n significa uma nova linha, então você consegue exatamente isso. A última barra invertida vem como está, pois \s não é um código de escape válido.
Make executa os comandos através de um shell, usando /bin/sh por padrão, e no Debian isso é traço. O echo incorporado do Dash processa barras invertidas. Bash não faz isso. (E nem o /bin/echo externo no Debian, nem que isso importe, a menos que você execute explicitamente /bin/echo ).
Sua melhor aposta é usar printf explicitamente, pelo menos é seguro, pois sempre processa escapes com barra invertida. O abaixo deve sempre fazer a mesma coisa, o \n no início produz uma barra invertida real e um n , o \n depois produz uma nova linha para terminar a linha.
foo:
printf '\newcommand\n' > foo
(ou, se você quiser evitar o processamento de barras invertidas, use printf "%s" '\newcommand' )
Veja a pergunta Por que printf é melhor que echo? para mais detalhes sobre echo gotchas.