我读过太多关于颠覆关键字和许多其他细节(如锚点和锚点符号)的文章,但没有一篇是在谈论 c++。
我正在使用 QT creator,我希望 c++ 读取 svn 版本并将其作为值或字符串(或任何数据类型)通过我的代码。
那么,我该怎么做呢?
来自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
在您的情况下可能不需要该文件,也可以在标题中定义常量。
就像接受的答案所说,您可以使用 QProcess 通过系统终端运行命令,等待它完成,然后获取命令的文本。
感谢你的帮助。实际上我找到了另一种方法。请参考这个问题: