gpt4 book ai didi

svn - 寻找一种将版本存储在从 git repo 编译的二进制文件中的方法

转载 作者:太空狗 更新时间:2023-10-29 14:09:32 26 4
gpt4 key购买 nike

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

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

我想在二进制文件中包含的是:

  • 编译时间
  • 作为基础的 SVN 提交
  • 最后一次 git 提交 ID 和时间
  • 如果可能的话,影响这个特定二进制文件的最后一次提交

最佳答案

您可能希望编写源代码以使用#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)"' 添加到相应对象的构建标志中。

一个细微的变化:让您生成的文件纯粹是版本字符串,然后将该值 pull 入 makefile 中的适当变量。

如果您需要有关特定 git 命令的帮助以获得所需的输出,请随时发表评论。不过,git describe 是一个很棒的工具,专为这类事情而设计。默认输出是当前提交的最近标记祖先、连字符、自标记、连字符和缩写的提交哈希之后的提交数。

关于svn - 寻找一种将版本存储在从 git repo 编译的二进制文件中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4196236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com