我正在寻找一些实施binary --version
的技巧,这些技巧可以提供有关其编译版本的完整信息。
该项目正在使用autotools
构建系统,并存储在充当SVN前端的git仓库中。
我希望在二进制文件中包含:
答案 0 :(得分:3)
您可能希望编写源代码以使用#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 = "..."
这样的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
是一个很棒的人,但对于这种事情来说意味着什么。默认输出是当前提交的最接近的标记祖先,连字符,自标记,连字符和缩写提交哈希以来的提交次数。
答案 1 :(得分:0)
如果您使用automake,VERSION_FILE
(请参阅其他答案)也需要在BUILT_SOURCES
中标记为Makefile.am
,以便成功与myprog_SOURCES
一起使用。