如何编写将应用可选补丁的makefile后缀规则

时间:2013-02-26 14:35:55

标签: makefile patch

在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就会保留原样吗?

1 个答案:

答案 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 $<