我正在寻找一些实现binary --version的技巧,这些技巧将提供有关它编译的版本的良好信息。
该项目使用autotools构建系统,并存储在充当SVN前端的git中。
在二进制文件中,我想要的是:
<代码>F 211
发布于 2010-11-16 16:35:21
您可能希望编写源代码来使用#定义的常量版本字符串。然后,您可以使用-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 = "..."的makefile片段。这再次增加了冗余,允许您使用已经创建的版本文件分发项目,这样构建就不必依赖于SCM的存在。
然后,您可以根据需要创建版本字符串,例如:
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是一个很棒的软件,它正是用于这类事情的。默认输出是当前提交、连字符、自标记以来提交的次数、连字符和缩写提交散列的最近标记祖先。
发布于 2010-11-22 03:00:15
VERSION_FILE (请参阅其他答案)也需要在Makefile.am中标记为BUILT_SOURCES,这样才能成功地与myprog_SOURCES一起使用,以防您使用自动化。
https://stackoverflow.com/questions/4196236
复制相似问题