Eu gostaria de incluir o seguinte comando (retirado daqui ) em um arquivo Makefile
. Uma versão simples do meu Makefile
script contendo o comando é:
copy_files:
sed 's/^/\./' ./input_file | \
rev | \
LC_ALL=C sort -u | \
awk 'p == "" || substr($0,1,length(p)) != p { print $0; p = $0 }' | \
rev | \
sed 's/^\.//' > ./output_file
O problema que estou tendo é que quando executo usando make
, ele não consegue reconhecer o $0
símbolo:
awk: cmd. line:1: p == "" || substr(,1,length(p)) != p { print ; p = }
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: p == "" || substr(,1,length(p)) != p { print ; p = }
awk: cmd. line:1: ^ syntax error
Tentei escapar do $0
uso \$0
sem sucesso. Qual é a solução?
Você estava no caminho certo; para escapar do símbolo do dólar em um Makefile, você precisa usar
$$
, não\$
:Como você está construindo um arquivo de saída usando um arquivo de entrada, você deve informar explicitamente ao Make sobre isso:
Com esta definição, Make irá “reconstruir”
output_file
se estiver faltando ou seinput_file
for mais recente.$<
faz referência às entradas (conhecidas como pré-requisitos),$@
faz referência à saída (conhecida como destino).Se você quiser um
copy_files
alvo, declare isso dependendo deoutput_file
:Se o seu Make souber sobre alvos falsos, mencione isso também: