例如:
# 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
我想避免文件名和目录混乱,只是就地应用编辑,并准备好由原始源代码树提供的原始makefile(对文件名和目录非常复杂和敏感)所促成的重建。
@AUZKamath,我的编辑包含在foo.dif
中。这是为了在最终用户系统上的现有源树上部署我的补丁。我做错了吗?
答案 0 :(得分:6)
您可以使用所谓的“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 $@ ]; then patch -R foo.c $@; fi
patch foo.c $<
cp foo.diff $@
foo
取决于foo.c
,而foo.c
取决于foo.c.patched
,这取决于补丁文件。因此,在构建foo
之前,如果foo.c.patched
不存在或foo.diff
更新,则会构建foo.c.patched
。 foo.c
的规则应用补丁,然后保存它的副本。
所以:
foo.c
,则会重建您可以编辑foo.diff
或{{1}},只要您在编辑过程中不会产生冲突,构建系统就会处理其余部分。