0

在 makefile(我有 GNU Make 3.82)中,假设我有一个像这样设置的后缀规则:

.a.b:
    a_to_b $<

现在,假设我想对生成的 .b 文件应用补丁。我可以做这个:

.a.b:
    a_to_b $<
    patch -p0 < $*.patch

但是,如果没有每个 .b 的补丁,如何才能使补丁步骤以 .patch 文件的存在为条件,以便任何具有可用补丁的 .b 都应用补丁,但留下任何其他 .b就像 a_to_b 完成后一样?

4

1 回答 1

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 $<
于 2013-02-27T12:34:53.460 回答