您可以使用所谓的“哨兵”文件来表明补丁已经被应用。
foo.c
:
#include <stdio.h>
int main() {
printf("hi!\n");
}
foo.diff
:
--- foo.c
+++ foo.c
@@ -1,5 +1,5 @@
#include <stdio.h>
int main() {
- printf("hi!\n");
+ printf("goodbye.\n");
}
Makefile
:
foo: foo.c
foo.c: foo.c.patched
foo.c.patched: foo.diff
if [ -e $@ ]; then patch -R foo.c $@; fi
patch foo.c $<
cp foo.diff $@
foo
取决于foo.c
和foo.c
取决于foo.c.patched
,这取决于补丁文件。所以 beforefoo
被构建,foo.c.patched
如果它不存在或者foo.diff
是新的,将被构建。应用补丁的规则foo.c.patched
,然后保存它的副本。
所以:
- 如果您尚未应用补丁,它将自动应用
- 如果你修改
foo.c
,它将被重建
- 如果您修改补丁,构建系统将在必要时恢复以前应用的补丁,然后应用新补丁
您可以编辑或者foo.c
,foo.diff
只要您在编辑过程中不产生冲突,构建系统将处理其余部分。