【发布时间】:2013-09-26 01:36:58
【问题描述】:
我有一个简单的线性数据处理管道,需要为多个输入文件运行,所以我将此过程指定为一组 Make 规则:
file1.abc: file1.input
do some stuff
file1.def: file1.abc
do some stuff
file1.ghi: file1.def some_script.py
do some stuff
...等等。
当我运行make file1.ghi 时,一切正常。而且,如果我更新 some_script.py 并再次运行该命令,则只会重新运行最后一步,正如我所期望的那样。
现在,如果我将我的 Makefile 重写为更通用并适用于 file1 以外的文件:
all: $(patsubst %.input, %.ghi, $(wildcard *.input))
%.abc: %.input
do some stuff
%.def: %.abc
do some stuff
%.ghi: %.def some_script.py
do some stuff
...运行make,它会自动创建我所有的产品。但是,如果我对 some_script.py 进行更改并再次运行 make,它会为每个输出文件重新运行整个管道,而不仅仅是最后一步。我希望由于只有最后一步的依赖项发生了变化,所以只有最后一步会重新运行。我怀疑问题是我对 Make 如何处理依赖关系的理解不完整。
为什么会这样,有解决办法吗?
【问题讨论】: