Isso não funciona porque a ferramenta make inicia um novo processo de shell para cada linha de receita. E variáveis de shell - mesmo variáveis de ambiente 'exportadas' - não podem se propagar "para cima"; eles desaparecem assim que o processo do shell termina.
-
O método tradicional é unir as linhas de receita usando
\no Makefile:foo: bar baz line1; \ line2; \ line3(Observe que os comandos devem ser separados usando
;ou&&, porque as barras invertidas também são passadas para o shell que faz a mesma junção de linhas.)Veja também
info make "Splitting Lines"einfo make "Splitting Recipe Lines"no manual GNU Make. -
O outro método é informar
makepara sempre usar um processo de shell para toda a receita, usando a diretiva.ONESHELL:.ONESHELL: foo: bar baz line1 line2 line3Veja
info make "One Shell".(Note que enquanto
.ONESHELLé recomendado por POSIX, nem todas as versões suportam ; por exemplo, BSD make only tem um sinalizador de linha de comando para isso. Isso não deve ser um problema.)