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

发布于 2024-10-21 16:44:08 字数 168 浏览 4 评论 0原文

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

I would like my Qt/C++ application to know which version it is. It should know that not from some configuration files, but with version number compiled into application binary. A version itself is string like "X.Y.Z", where X is a major version number, Y is a minor version number and Z is a revision under SVN (or a revision number under SVN minus a revision number when version "X.Y.0" came out). What would you think is the simplest way to accomplish this with scons?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

Spring初心 2024-10-28 16:44:09

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

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

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

以及您想要的任何其他替代格式)和 在某处声明

extern char *VERSION;

,只有一个文件将被重新编译,再加上重新链接的应用程序(无论如何它都会发生,因为其他一些源也可能发生变化,对吧)。

SCons has Substfile and Textfile builders for generating files. So create a function to calculate the version (using pysvn or by calling svn command) and write it's output to a file using Substfile (takes template from a file) or Textfile (just writes provided content). Than compile and link that file with the rest of the application.

The file should be a source file (not a header) with content like (assuming C/C++, but the same technique would be appropriate with any language):

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

(and any other alternate formats you want) and declare

extern char *VERSION;

somewhere, than only the one file will be recompiled plus the application relinked (which it will anyway, because some other sources probably changed too, right).

奶气 2024-10-28 16:44:09

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

布莱恩·科迪:

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

祝你好运

加里·奥伯布伦纳:

<块引用>

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

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

--
——加里

Here are some more answers that came from [scons-users] mailing list.

Brian Cody:

One command line option we pass into
scons is the repository version of the
SVN rep. We then put this number into
a define (-DREP_NUM=\"123\") and build
a string in our C++ code that uses
this number. That's for our server run
builds. For local builds, we actually
use the username instead of the
version number, because someone's
local build of version XYZ doesn't
necessarily equal someone else's XYZ
(in windows, the env var USERNAME
contains the logged-in user). One
other consideration is that changing
any part of a compilation statement in
scons means that the target is
automatically out-of-date. To work
around this issue our build system
picks out the one object target that
actually cares about the flags and it
only passes the flags to the
compilation of that one object.

Good luck

Gary Oberbrunner:

I would like my Qt/C++ application to know which version it is.

There's some info at
http://www.scons.org/wiki/BuildNumberProcessing
which may be helpful.

--
-- Gary

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文