使用scons管理版本的最佳实践?

时间:2011-03-11 04:55:34

标签: c++ qt scons

我希望我的Qt / C ++应用程序知道它是哪个版本。它应该知道不是来自某些配置文件,而是将版本号编译成应用程序二进制文件。版本本身就是字符串,如“XYZ”,其中X是主要版本号,Y是次要版本号,Z是SVN下的版本(或SVN下的版本号减去版本“XY0”出来时的版本号) )。您认为用scons实现这一目标的最简单方法是什么?

2 个答案:

答案 0 :(得分:9)

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

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

Textfile

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

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

在某个地方,只有一个文件将被重新编译,再加上应用程序重新链接(无论如何,因为其他一些来源也可能会改变,对吧)。

答案 1 :(得分:1)

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

Brian Cody:

  

我们传入的一个命令行选项   scons是该版本的存储库版本   SVN代表然后我们把这个号码放进去   定义(-DREP_NUM = \“123 \”)和构建   我们的C ++代码中使用的字符串   这个号码。这是我们的服务器运行   建立。对于本地构建,我们实际上   使用用户名而不是   版本号,因为有人的   版本XYZ的本地版本没有   必须等于别人的XYZ   (在windows中,env var USERNAME   包含登录用户)。一   其他考虑是改变   中的汇编声明的任何部分   scons意味着目标是   自动过时。上班   围绕这个问题我们的构建系统   选出一个对象目标   实际上关心旗帜和它   只将标志传递给   汇编那一个对象。

     祝你好运

Gary Oberbrunner:

  
    

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

  
     

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

     

-    - 加里

相关问题