您可以使用所谓的“sentinel”文件来指示该补丁已被应用。
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 [email protected] ]; then patch -R foo.c [email protected]; fi
patch foo.c $<
cp foo.diff [email protected]
foo
取决于foo.c
,并foo.c
取决于foo.c.patched
,这取决于补丁文件。因此在构建foo
之前,如果它不存在或者foo.diff
较新,则将构建foo.c.patched
。 foo.c.patched
的规则应用该修补程序,然后保存该修补程序的副本。
所以:
- 如果您尚未应用的补丁已经,它会自动应用
- 如果修改
foo.c
,它会重建
- 如果修改了补丁,构建系统如有必要,将恢复先前应用的修补程序,然后应用新补丁
您可以编辑或者foo.c
或foo.diff
并且,只要您在编辑期间不会产生冲突,构建系统就会处理剩下的问题。
为什么你想补丁依赖于foo.c?理想情况下,只有存在新的差异时才会打补丁。 – Kamath
@AUZKamath,我不太明白你的意思。编辑一下。关于'foo.dif':它始终可用作我的“非官方”补丁的一部分,以便在终端用户从其他地方获得的现有源代码树上应用。 – OnTheFly
工作流程:我修正了'foo.c'中的错误,生成了一个'diff',重新生成并测试过了,现在我想分发我的编辑而不等待我的补丁合并到“官方”源代码树中。这里出现混乱。 – OnTheFly