我在寻找一些提示来实现binary --version
,它可以提供关于它编译的版本的好信息。寻找一种方法来存储从git repo编译的二进制版本
该项目使用autotools
构建系统,并存储在一个充当SVN前端的git仓库中。
我想什么有二进制里面是:
- 编译时间
- SVN提交这个作为基础
- 最后混帐如果可能的最后一次提交该提交ID和时间
- 影响这个特定的二进制文件
我在寻找一些提示来实现binary --version
,它可以提供关于它编译的版本的好信息。寻找一种方法来存储从git repo编译的二进制版本
该项目使用autotools
构建系统,并存储在一个充当SVN前端的git仓库中。
我想什么有二进制里面是:
你可能想编写你的源代码来使用#defined常量版本字符串。然后,您可以通过-DMY_VERSION=...
选项通过构建。这样可以让你在代码中嵌入一个默认值,并且包裹在#ifndef
中,以防万一!
#ifndef MY_VERSION
#define MY_VERSION 0.0.1-alpha
#endif
print_version() {
printf("my product: %s\n", MY_VERSION);
}
一个很好的方法来处理这在构建过程侧,使中间产物生成这简直是一个生成文件片断像MY_VERSION = "..."
。这又通过让您分发已经创建的版本文件的项目来增加冗余,以便构建不必依赖于SCM的存在。
然后你可以,只要你喜欢创建版本字符串,例如:
echo -n 'MY_VERSION = "' > VERSION_FILE
git describe >> VERSION_FILE
echo "Compiled on $(date)" >> VERSION_FILE
...
echo '"' >> VERSION_FILE
然后在你的主生成文件,包括片段,并添加-DMY_VERSION='"$(MY_VERSION)"'
到构建标志为合适的对象。
稍有不同:使生成的文件纯粹为版本字符串,然后将该值拉入makefile中的相应变量。
如果您需要特定git命令的帮助来获得所需的输出,请随时发表评论。尽管如此,git describe
是一款出色的产品。默认输出是当前提交的最接近的标记祖先,连字符,自标记以来的提交数,连字符和缩写提交哈希。
需求VERSION_FILE
(见其他答案)在Makefile.am
被标记为BUILT_SOURCES
也为它成功地使用myprog_SOURCES
,如果你使用automake。
+1,'git describe'在历史中至少需要一个标记,或者它保存。 – richq 2010-11-16 20:56:37
@rq:当然。假设你正在标记你的版本 - 你绝对应该这样做! – Cascabel 2010-11-16 21:13:57