软件版本号插入

Software version number insertion

我一直在想一种方法,如何将Major.minor.build形式的软件版本号插入到源代码中,而不需要手动修改源代码。

我有一个想法,版本号的所有部分都将来自 来自版本控制软件(在我的例子中是 Mercurial)的信息。 主要minor 将由标签编号 (M.m) 自动填充,build 将由 修订号。就是这个意思。

就实现而言,我认为我可以编写一个由某个钩子触发的脚本 (可能是 pretag 钩子)。这个脚本的目标是创建一个C语言头文件 包含以下内容的文件(例如 Version.h

#define MAJOR   M 
#define MINOR   m
#define BUILD   b

Version.h header 将由负责软件版本号的模块包含 发布(在我的例子中是通过在通信 table 中填写几条记录)。实际上 将软件版本号填写到源代码中,这是第二次需要做的 步骤 - 链接器确保扩展上述符号的编译 常数。

每当我发布新软件时,我都会先创建一个标签(分配实际数字 到上面的符号常量)。然后我 运行 编译过程将之前检索到的数字推送到源代码中的正确位置。

您觉得推荐的方法好用吗?感谢您的任何建议。

  1. 您可以(理论上)从未标记的提交构建(否则您的树将被标记淹没)
  2. 对于您的模型
    • 0.8.1618(尾随 {rev})似乎不错,但考虑可能的历史重写(即使在同一个 repo 中也可以更改本地 rev)
    • 0.8.229f43b67c2a(尾随{{node|short})不好看,但在大多数情况下适合历史探索
  3. 我认为,您可以根据 article in Mercurial wiki 的想法和我的建议,对您的构建链进行(可能)小的修正:
    • 在标签中写入完整版本 (mayor.minor.build)
    • 与最后一个标签的距离写入补丁(为了更好的可读性)

我有完整版作为标签,使用自己的模板别名

semver = "{latesttag}{ifeq(latesttagdistance,0,'','+{latesttagdistance}')}"

用于构建可用且易于理解的版本字符串,而不是在 wiki plain {node|short} 中建议的字符串,因此,我当前的 nice tip 显示为0.8.13+38

HTH