3

我读过太多关于颠覆关键字和许多其他细节(如锚点和锚点符号)的文章,但没有一篇是在谈论 c++。

我正在使用 QT creator,我希望 c++ 读取 svn 版本并将其作为值或字符串(或任何数据类型)通过我的代码。

那么,我该怎么做呢?

4

3 回答 3

2

来自SVNBook的文本可能与此处相关:

新用户经常对 $Rev$ 关键字的工作方式感到困惑。由于存储库有一个单一的、全局递增的修订号,许多人认为 $Rev$ 关键字的值反映了这个数字。但是 $Rev$ 会展开以显示文件更改的最后一个修订版,而不是它更新到的最后一个修订版。理解这一点可以消除困惑,但常常会感到沮丧——没有 Subversion 关键字的支持,如何自动将全局修订号放入文件中?

为此,您需要外部处理。Subversion 附带了一个名为 svnversion 的工具,它就是为此目的而设计的。它抓取您的工作副本并生成它找到的修订作为输出。您可以使用这个程序,加上一些额外的工具,将修订信息嵌入到您的文件中。有关 svnversion 的更多信息,请参阅名为“svnversion”的部分。

在我的项目中,我们最终没有使用svnversion,主要是因为我们的源代码树很大,而且这个命令似乎花费了过多的时间。但是我们最终确实得到了类似的东西来将修订号输入我们的软件。该configure脚本执行以下命令

svn info . > svn_revision

这假设命令是从从 svn 存储库中签出的目录中执行的。为了解析这些数据,我有一个 Makefile 将各种字符串 grep 成常量

SVN_REV = $(shell cat svn_revision | grep "Last Changed Rev" | cut -f4 -d\ )                                              

这是通过我调用的模板文件提供的version.cc.template,有一个 Makefile 规则将其转换为.cc文件

version.cc: version.cc.template /svn_revision
        sed -e "s/REVISION/$(SVN_REV)/" version.cc.template > $@                                     

所以我最终得到了这样的东西

版本.h

namespace project {

extern const char* Revision;
extern const unsigned int SvnRevision;

}

版本.cc

namespace project {

const char* Revision = "1234";
const unsigned int SvnRevision = 1234;

}

version.cc在您的情况下可能不需要该文件,也可以在标题中定义常量。

于 2013-04-04T16:00:31.990 回答
2

如何获取 system() 命令 qt c++ 的输出?

就像接受的答案所说,您可以使用 QProcess 通过系统终端运行命令,等待它完成,然后获取命令的文本。

于 2013-04-04T16:08:27.230 回答
0

感谢你的帮助。实际上我找到了另一种方法。请参考这个问题:

如何将命令行传递给 QMake #DEFINE

于 2013-04-08T21:28:07.310 回答