在makefile中(我有GNU Make 3.82),假设我有一个后缀规则设置如下:
.a.b:
a_to_b $<
现在,假设我想在生成的.b文件中应用补丁。我可以这样做:
.a.b:
a_to_b $<
patch -p0 < $*.patch
但是,如果没有针对每个.b的补丁,那么补丁步骤如何以.patch文件的存在为条件,以便任何带补丁的.b都可以应用补丁但是其他任何补丁。一旦a_to_b完成,b就会保留原样吗?
答案 0 :(得分:4)
如果您要执行的只是应用补丁(如果存在),您只需将规则更改为:
.a.b:
a_to_b $<
[ ! -f $*.patch ] || patch -p0 < $*.patch
但是,如果修补程序文件已更改,即使.a文件未更改,您可能也希望触发规则。在这种情况下,您将不得不切换到模式规则,并编写两个:一个具有补丁先决条件,另一个没有:
%.b : %.a %.patch
a_to_b $<
patch -p0 < $*.patch
%.b : %.a
a_to_b $<