4

git describe --tags --dirty --long用来获取一个在我的库中使用的字符串,const char []以便在只有二进制文件时知道(例如通过打印)git-revision。

我正在生成一个与所有其他文件一起编译的文件(gitref.c)。我最近意识到,当我更改克隆中的 git 修订版然后重新运行时,gitref.c不会重新生成构建过程。这很正常——没有依赖性。

我发现对.git/HEAD的依赖是一个很好的开始,并且在大多数情况下都有效。这种依赖够吗?如果没有,添加(文件)依赖项的正确方法是什么?

编辑:感谢@BenJackson:标记这还不够 - HEAD没有改变。

4

1 回答 1

1

恕我直言,唯一的解决方案是认为这个文件总是过时的,有一个虚假的依赖。每次编译时,都必须重新生成。一个稍微更优雅的解决方案是始终生成 agitref.c.tmp然后将其复制到gitref.c仅当文件不同时(例如,在*NIX 类系统上,您可以使用cmp它们来逐字节比较它们)。如果它们相同,只需删除临时文件。

编辑:以下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 回答