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
make
para sempre usar um processo de shell para toda a receita, usando a diretiva.ONESHELL
:.ONESHELL: foo: bar baz line1 line2 line3
Veja
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.)