GNU Make支持``隐式规则链'。我想要实现的是写入Makefile的一个部分来实现这个目的:
A,B,C和D是具有不同扩展名的四个文件(例如,表示.p,.q,.r和.t)。 B和C是我不需要的中间文件,而A是源文件,D是输出。问题是A实际上是一组非常大的文件。所以我想使用Makefile的隐式规则链来实现这一点。但我不知道如何知道中间文件B和C的文件名,如:
%.t : %.r : %.q : %.r
cmd1 $< ?
cmd2 ? ??
cmd3 ?? $@
在哪里?和??是中间文件的名称。我没有找到关于如何命名这些文件的非常具体的解释。 GNU make手册页仅提供变量表示,例如$&lt;和$ @对我来说不是直接使用的。非常感谢。
答案 0 :(得分:4)
您应该将规则拆分为单独的部分:
%.t: %.r.tmp
cmd1 $< $@
%.r.tmp: %.q
cmd2 $< $@
%.q: %.r
cmd3 $< $@
当您创建target.t时,将为您生成中间target.r.tmp,target.q,并在最后删除它们。
修改的
如果除了cmd2,cmd3以外的任何地方都没有使用中间文件* .r.tmp,*。q,我个人不想创建隐式规则。
虽然“隐式规则链”是一个很好的模式,但对于Makefile,IMO来说并不是必需的。再一次,这只是个人感觉。
%.t: %.r
cmd1 $< $*.r.tmp
cmd2 $*.r.tmp $*.q
cmd3 $*.q $@
rm -f $*.r.tmp $*.q