いわゆる「センチネル」ファイルを使用して、パッチが既に適用されていることを示すことができます。
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
ます。編集中に競合が発生しない限り、残りはビルド システムが処理します。