Eu escrevi um Makefile e descobri que ao executar o make
comando, um inesperado rm
foi executado, depois que todos os comandos no Mmakefile foram feitos. Mas eu não escrevi o rm
comando no Makefile.
run-%: d/%.out
$<
d/%.out: d/%.c
gcc -o $(subst .c,.out,$<) $<
Saída de execução make run-a
:
gcc -o d/a.out d/a.c
d/a.out
rm d/a.out
Observe o trailing rm d/a.out
, que eu não escrevi.
Em que circunstância o rm
comando automático será adicionado?
Quando você fez
make run-a
, o arquivod/a.out
foi criado por um destino intermediário (uma dependência derun-a
) que, quando o destino principal (run-a
) foi construído e o resultado desse destino intermediário não é mais necessário, é removido.Você pode impedir a remoção
d/a.out
declarando-o como "precioso":Veja também "Chains of Implicit Rules" no manual GNU Make: