4

私はgit describe --tags --dirty --long自分のライブラリで使用される文字列を取得するために使用しています。これはconst char []、バイナリのみを持っている場合に git-revision を知るために (たとえば、printing によって) 使用されます。

他のすべてのファイルと一緒にコンパイルされるファイル (gitref.c) を生成しています。gitref.c最近、クローンの git リビジョンを変更して再実行すると、ビルド プロセスが再生成されないことに気付きました。それは正常です - 依存関係はありません。

.git/HEADへの依存関係は良いスタートであり、ほとんどの場合うまくいくことがわかりました。その依存関係は十分ですか?そうでない場合、(ファイル) 依存関係を追加する正しい方法は何ですか?

EDIT : @BenJackson のおかげです: タグ付けする場合、これでは不十分です - HEADは変更されません。

4

1 に答える 1

1

これに対する私見の唯一の解決策は、このファイルが常に時代遅れであり、偽の依存関係があると見なすことです。コンパイルするたびに、再生成する必要があります。もう少し洗練された解決策は、常に を生成し、ファイルが異なる場合gitref.c.tmpにのみ にコピーすることです (たとえば、*NIX のようなシステムでは、それらをバイトごとに比較するために使用できます)。それらが同じ場合は、一時ファイルを削除してください。gitref.ccmp

編集:次のMakefileスニペットは私のために機能します

PHONY: gitref_dummy
gitref_dummy:
gitref.c: gitref_dummy
    @echo "const char *gitref = \"$$(git describe --tags --dirty --long)\";" > \
        gitref.c.tmp
    @cmp -s gitref.c.tmp gitref.c || \
        (echo "Updating gitref.c"; mv gitref.c.tmp gitref.c)
    @rm -f gitref.c.tmp
于 2013-03-01T08:25:38.700 に答える