【问题标题】:Best practices to manage versions with scons?使用 scons 管理版本的最佳实践?
【发布时间】:2011-03-11 04:55:33
【问题描述】:

我希望我的 Qt/C++ 应用程序知道它是哪个版本。它应该不是从某些配置文件中知道的,而是通过编译成应用程序二进制文件的版本号。版本本身是类似“XYZ”的字符串,其中 X 是主要版本号,Y 是次要版本号,Z 是 SVN 下的修订(或 SVN 下的修订号减去版本“XY0”时的修订号)。您认为使用 scons 完成此任务的最简单方法是什么?

【问题讨论】:

  • 如果版本号的唯一目的是向用户显示某些内容,则可以使用字符串。如果有任何编程访问,您将希望将每个版本组件放在一个单独的字段中(请参阅stackoverflow.com/questions/2195573/…)。此外,为了更容易自动化版本增量(例如,对于发布构建脚本),将版本分隔为字段是一个胜利。

标签: c++ qt scons


【解决方案1】:

SCons 具有用于生成文件的 SubstfileTextfile 构建器。因此,创建一个函数来计算版本(使用pysvn 或通过调用svn 命令)并使用Substfile(从文件中获取模板)或Textfile(仅写入提供的内容)将其输出写入文件。然后编译该文件并将其与应用程序的其余部分链接。

该文件应该是一个源文件(不是头文件),其内容类似于(假设为 C/C++,但相同的技术适用于任何语言):

char *VERSION = "X.Y.Z";

(以及您想要的任何其他替代格式)并声明

extern char *VERSION;

在某个地方,不仅会重新编译一个文件,而且还会重新链接应用程序(无论如何它都会重新链接,因为其他一些源可能也发生了变化,对吧)。

【讨论】:

  • +1。将版本值放在源文件中是个好主意。我发现为 1. 版本字符串和 2. 具有用于主要、次要等值的单独字段的版本结构的访问器函数创建一个标题(不需要修改)很有用。
  • 感谢您的回答,我会选择这个。很抱歉接受得这么慢。
  • 这很有帮助,但我认为缺少如何计算/检索版本的部分。每个 OP,Z 可以从 svn 计算出来,但是 X.Y 是从哪里来的呢?我想它们应该以某种方式出现在分支/标签名称中?
【解决方案2】:

以下是来自 [scons-users] 邮件列表的更多答案。

布莱恩·科迪:

我们传入的一个命令行选项 scons 是 SVN 代表。然后我们把这个数字放入 定义 (-DREP_NUM=\"123\") 并构建 我们的 C++ 代码中使用的字符串 这个号码。那是为了我们的服务器运行 构建。对于本地构建,我们实际上 使用用户名而不是 版本号,因为有人的 版本 XYZ 的本地版本不 必然等于别人的 XYZ (在 Windows 中,环境变量 USERNAME 包含登录用户)。一 另一个考虑是改变 编译语句的任何部分 scons 表示目标是 自动过期。去工作 围绕这个问题我们的构建系统 挑选出一个对象目标 实际上关心旗帜和它 只将标志传递给 编译那个对象。

祝你好运

加里·奥伯布伦纳:

我希望我的 Qt/C++ 应用程序知道它是哪个版本。

有一些信息在 http://www.scons.org/wiki/BuildNumberProcessing 这可能会有所帮助。

-- -- 加里

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多