我读过太多关于颠覆关键词和许多其他细节的文章,比如锚点和锚标志,但是没有一篇谈论c ++。
我正在使用QT创建者,我希望c ++读取svn-version并将其作为值或字符串(或任何数据类型)传递给我的代码。
那么,我该怎么做?
答案 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)
感谢大家的帮助。实际上我找到了另一种方法。请参考这个问题: