首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找将版本存储在从git repo编译的二进制文件中的方法。

寻找将版本存储在从git repo编译的二进制文件中的方法。
EN

Stack Overflow用户
提问于 2010-11-16 16:10:42
回答 2查看 323关注 0票数 3

我正在寻找一些实现binary --version的技巧,这些技巧将提供有关它编译的版本的良好信息。

该项目使用autotools构建系统,并存储在充当SVN前端的git中。

在二进制文件中,我想要的是:

  • 编译时间
  • SVN提交,充当基
  • 最后git提交ID和时间
  • (如果可能的话),最后一次提交会影响到这个特定的二进制

<代码>F 211

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-16 16:35:21

您可能希望编写源代码来使用#定义的常量版本字符串。然后,您可以使用-DMY_VERSION=...选项将其传递到构建过程中。这将使您也可以在代码中嵌入一个默认值,包装在#ifndef中,以防万一!

代码语言:javascript
复制
#ifndef MY_VERSION
#define MY_VERSION 0.0.1-alpha
#endif

print_version() {
    printf("my product: %s\n", MY_VERSION);
}

在构建流程端处理这个问题的一个很好的方法是制作一个中间构建产品,这只是一个类似于MY_VERSION = "..."的makefile片段。这再次增加了冗余,允许您使用已经创建的版本文件分发项目,这样构建就不必依赖于SCM的存在。

然后,您可以根据需要创建版本字符串,例如:

代码语言:javascript
复制
echo -n 'MY_VERSION = "' > VERSION_FILE
git describe >> VERSION_FILE
echo "Compiled on $(date)" >> VERSION_FILE
...
echo '"' >> VERSION_FILE

然后,在主makefile中,包含该代码段,并将-DMY_VERSION='"$(MY_VERSION)"'添加到相应对象的构建标志中。

稍作改动:将生成的文件纯为版本字符串,然后将该值拉到makefile中的适当变量中。

如果您需要帮助使用特定的git命令来获得所需的输出,请随意评论。不过,git describe是一个很棒的软件,它正是用于这类事情的。默认输出是当前提交、连字符、自标记以来提交的次数、连字符和缩写提交散列的最近标记祖先。

票数 3
EN

Stack Overflow用户

发布于 2010-11-22 03:00:15

VERSION_FILE (请参阅其他答案)也需要在Makefile.am中标记为BUILT_SOURCES,这样才能成功地与myprog_SOURCES一起使用,以防您使用自动化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4196236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档