Acabei de resolver um problema com meu(s) Makefile(s). Faça viagens em cada <<<
com a mensagem de erro
/bin/sh: 1: Syntax error: redirection unexpected
E gostaria de saber por quê. (estou usando Bash como SHELL
)
Em meus projetos atuais, tentei muitas receitas como:
target:
read FOO <<< "XXX"; \
read BAR <<< "YYY"; \
read BAZ <<< "ZZZ"; \
someprog -a param0 -b $$FOO -c param1 -d $${BAR} -e param2 -f $${BAZ} >$@
Tentar isso resultará em um erro para cada <<<
, conforme descrito no início. Minha solução alternativa é
target.dep:
echo "XXX YYY ZZZ" >$@
target: %: %.dep
read FOO BAR BAZ < $<;\
someprog -a param0 -b $$FOO -c param1 -d $${BAR} -e param2 -f $${BAZ} >$@
o que significa que coloco minhas coisas em arquivos temporários que leio com <
, o que funciona muito bem. Quando copio e colo minha saída make em um prompt bash normal, todos os comandos funcionam exatamente como esperado, mesmo com a extensão <<<
. Estou bastante certo de que meu problema é que usar o <<<
operador, ou seja, aqui strings, quebra alguma coisa. Por que isso e existe uma maneira de fazer as strings funcionarem em Makefiles?
PS: Sim, às vezes sinto que as ferramentas automáticas seriam a melhor escolha em vez da marca.