2

例えば:

# 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

ファイル名とディレクトリの混乱を避け、その場で編集を適用し、元のソースツリーで提供される元のメイクファイル (非常に複雑でファイル名とディレクトリに敏感です) によって容易に再構築できるようにしたいと考えています。


@AUZKamath、それに含まれる私の編集foo.dif。これは、エンド ユーザー システムの既存のソース ツリーにパッチを展開するためのものです。私はそれを間違っていますか?

4

1 に答える 1

7

いわゆる「センチネル」ファイルを使用して、パッチが既に適用されていることを示すことができます。

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.cfoo.c.patchedfoofoo.c.patchedfoo.difffoo.c.patched

そう:

  • まだパッチを適用していない場合は、自動的に適用されます
  • を変更するfoo.cと、再構築されます
  • パッチを変更すると、ビルド システムは必要に応じて以前に適用されたパッチを元に戻し、新しいパッチを適用します。

または のいずれfoo.cかを編集できfoo.diffます。編集中に競合が発生しない限り、残りはビルド システムが処理します。

于 2012-11-22T17:45:57.153 に答える