我正在使用 git describe --tags --dirty --long
获取一个字符串,该字符串在我的库中用作 const char []
以了解(例如,通过打印)只有二进制版本的 git-revision。
我正在生成一个与所有其他文件一起编译的文件 (gitref.c)。我最近意识到,当我更改克隆中的 git 修订版然后重新运行构建过程时,gitref.c
不会重新生成。这很正常 - 没有依赖性。
我发现对 .git/HEAD 的依赖是一个不错的开始,并且在大多数情况下都能正常工作。这种依赖就够了吗?如果不是,添加(文件)依赖项的正确方法是什么?
编辑:感谢@BenJackson:标记时这还不够 - HEAD 未更改。
最佳答案
恕我直言,唯一的解决方案是将此文件视为具有虚假依赖项的过时文件。每次编译时,都必须重新生成。一个稍微更优雅的解决方案是始终生成一个 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
关于Git 描述构建依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15151899/