我希望我的Qt / C ++应用程序知道它是哪个版本。它应该知道不是来自某些配置文件,而是将版本号编译成应用程序二进制文件。版本本身就是字符串,如“XYZ”,其中X是主要版本号,Y是次要版本号,Z是SVN下的版本(或SVN下的版本号减去版本“XY0”出来时的版本号) )。您认为用scons实现这一目标的最简单方法是什么?
答案 0 :(得分:9)
SCons有Substfile
和Textfile
个构建器用于生成文件。因此,创建一个函数来计算版本(使用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 这可能会有所帮助。
- - 加里