例如:
# patched foo.c depends on original foo.c and couple of my edits in foo.dif
foo.c: foo.c foo.dif
patch foo.c foo.dif
Run Code Online (Sandbox Code Playgroud)
我想避免文件名和目录混乱,只是就地应用编辑,并准备好由原始源代码树提供的原始makefile(对文件名和目录非常复杂和敏感)所促成的重建.
@AUZKamath,我的编辑内容foo.dif.这是为了在最终用户系统上的现有源树上部署我的补丁.我做错了吗?
您可以使用所谓的"sentinel"文件来指示已应用该修补程序.
foo.c:
#include <stdio.h>
int main() {
printf("hi!\n");
}
Run Code Online (Sandbox Code Playgroud)
foo.diff:
--- foo.c
+++ foo.c
@@ -1,5 +1,5 @@
#include <stdio.h>
int main() {
- printf("hi!\n");
+ printf("goodbye.\n");
}
Run Code Online (Sandbox Code Playgroud)
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 $@
Run Code Online (Sandbox Code Playgroud)
foo取决于foo.c,foo.c取决于foo.c.patched,这取决于补丁文件.所以在foo构建之前,foo.c.patched如果它不存在或者foo.diff更新则将被构建.foo.c.patched应用修补程序的规则然后保存它的副本.
所以:
foo.c,它将被重建您可以编辑任何foo.c或foo.diff和,只要你不你在编辑过程中制造矛盾,构建系统将处理其余部分.