【发布时间】:2019-01-25 02:36:13
【问题描述】:
假设我有一个像这样的 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 已被删除,这在很多情况下确实很糟糕。
那么为什么隐式规则不同呢?还是我做错了什么?
【问题讨论】: