Git 描述构建依赖

标签 git build

我正在使用 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/

相关文章:

git - 如何检查仓库是否存在?

ios - XCode 不会使用我的框架的最新版本

ios - Xamarin iOS 版本构建失败

unit-testing - 数据收集器 'Code Coverage' 未能提供初始化信息

build - 使用 easybuild cd 到目录

在 Sublime Text 2 中使用参数构建和运行

git - 执行 git commit -a 时发出警告

git - 无法在 Git 的两个独立分支中区分文件

git - 误推master后如何恢复

git - 如何设置当前分支(dev)以仅使用 git push 推送到 refs/remotes/test?