Git描述了构建依赖性

时间:2013-03-01 06:29:48

标签: git build

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

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

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

编辑:感谢@BenJackson:标记此内容还不够 - HEAD 不会更改。

1 个答案:

答案 0 :(得分:1)

恕我直言,对此唯一的解决方案是将此文件视为永远与虚假依赖项过时。每次编译时,必须重新生成。稍微优雅的解决方案是始终生成gitref.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