我希望我的Qt/C++应用程序能够知道它的版本。它不应该从某些配置文件中获取版本信息,而是应该在应用程序二进制文件中编译版本号。版本本身是一个字符串,如“X.Y.Z”,其中X是主要版本号,Y是次要版本号,Z是SVN下的修订版本(或者是版本“X.Y.0”发布时的修订版本号与SVN下的修订版本号之差)。你认为使用scons实现这个功能的最简单方法是什么?
我希望我的Qt/C++应用程序能够知道它的版本。它不应该从某些配置文件中获取版本信息,而是应该在应用程序二进制文件中编译版本号。版本本身是一个字符串,如“X.Y.Z”,其中X是主要版本号,Y是次要版本号,Z是SVN下的修订版本(或者是版本“X.Y.0”发布时的修订版本号与SVN下的修订版本号之差)。你认为使用scons实现这个功能的最简单方法是什么?
Substfile
和Textfile
构建器用于生成文件。因此,创建一个函数来计算版本(使用pysvn或调用svn
命令),并使用Substfile
(从文件中获取模板)或Textfile
(只写入提供的内容)将其输出写入文件。然后将该文件与应用程序的其他部分进行编译和链接。char *VERSION = "X.Y.Z";
extern char *VERSION;
如果只更改了一个文件,那么只有这个文件会被重新编译并且应用程序会被重新链接(因为其他源文件可能也发生了变化)。
以下是来自[scons-users]邮件列表的更多答案。
Brian Cody:
我们传递给scons的一个命令行选项是SVN版本库的版本号。然后,我们将此数字放入一个定义中(-DREP_NUM=\"123\"),并在我们的C++代码中构建使用此数字的字符串。这是针对我们的服务器运行构建的。对于本地构建,我们实际上使用用户名而不是版本号,因为某人的版本XYZ的本地构建不一定等于其他人的XYZ(在Windows中,环境变量USERNAME包含已登录用户)。另一个考虑因素是,在scons中更改编译语句的任何部分都意味着目标自动过期。为了解决这个问题,我们的构建系统挑选出实际关心标志的一个对象目标,并且只将标志传递给该对象的编译。
祝你好运
Gary Oberbrunner:
我想让我的Qt/C++应用程序知道它的版本号。这里有一些信息http://www.scons.org/wiki/BuildNumberProcessing可能会有所帮助。