我正在使用git describe --tags --dirty --long
获取一个字符串,该字符串在我的库中用作const char []
,以便在只有二进制文件时知道(例如通过打印)git-revision。
我正在生成一个用所有其他文件编译的文件(gitref.c)。我最近意识到,当我更改克隆中的git修订版然后重新运行build-process gitref.c
时,不会重新生成。这是正常的 - 没有依赖性。
我发现对 .git / HEAD 的依赖是一个很好的开始,大多数情况都是有效的。这种依赖性足够吗?如果没有,添加(文件)依赖的正确方法是什么?
编辑:感谢@BenJackson:标记此内容还不够 - HEAD 不会更改。
答案 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