Предположим, у меня есть Makefile, подобный этому
B1.txt: A1.txt
python big_long_program.py A1.txt > $@
correct1.txt: B1.txt reference.txt
diff -q B1.txt reference.txt
touch $@
Тогда результат, когда я создаю correct1.txt, довольно хорош, как я ожидал:
python big_long_program.py A1.txt > B1.txt
diff -q B1.txt reference.txt
touch correct1.txt
Теперь, если у меня многофайлов, B1.txt, B2.txt, B3.txt и т. д., поэтому создайте неявное правило:
B%.txt: A%.txt
python big_long_program.py A$*.txt > $@
correct%.txt: B%.txt reference.txt
diff -q B$*.txt reference.txt
touch $@
Вместо этого это происходит, когда я делаю правильное 1.txt:
python big_long_program.py A1.txt > B1.txt
diff -q B1.txt reference.txt
touch correct1.txt
rm B1.txt
то есть разница в том, что теперь файл B1.txt был удален, что во многих случаях действительно плохо.
Так почему же неявные правила отличаются?Или я что-то не так делаю?