如何通过我的c ++代码阅读和传递svn版本

时间:2013-04-04 15:37:36

标签: c++ qt svn

我读过太多关于颠覆关键词和许多其他细节的文章,比如锚点和锚标志,但是没有一篇谈论c ++。

我正在使用QT创建者,我希望c ++读取svn-version并将其作为值或字符串(或任何数据类型)传递给我的代码。

那么,我该怎么做?

3 个答案:

答案 0 :(得分:2)

SVNBook中的文字可能与此相关:

  

新用户经常对$ Rev $关键字的工作方式感到困惑。自从   存储库有一个全局增加的修订版号,很多   人们认为这个数字是由$ Rev $反映出来的   关键字的价值。但$ Rev $扩展显示最后一次修订   文件已更改,而不是更新的最新修订。   理解这一点可以清除混乱,但经常会感到沮丧   仍然 - 没有Subversion关键字的支持这样做,怎么可能   您是否自动将全局修订号编入您的文件中?

     

要执行此操作,您需要进行外部处理。 Subversion附带一个工具   称为svnversion,专为此目的而设计。它爬行   您的工作副本并生成它找到的修订的输出。   你可以使用这个程序,加上一些额外的工具来嵌入它   修订信息到您的文件中。有关的更多信息   svnversion,请参阅“svnversion”一节。

在我的项目中,我们最终没有使用svnversion,主要是因为我们的source tree is huge和这个命令似乎耗费了过多的时间。但我们最终得到了类似的东西,以便将修订号输入到我们的软件中。 configure脚本执行以下命令

svn info . > svn_revision

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

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 > $@                                     

所以我最终得到了类似的东西

<强> version.h中

namespace project {

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

}

<强> version.cc

namespace project {

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

}

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

答案 1 :(得分:2)

How to get the output of system() command qt c++?

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

答案 2 :(得分:0)

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

how to pass a Command-line to a QMake #DEFINE