我想实现一种在代码中记录项目版本的方法,以便在测试时使用它并帮助跟踪错误。 看来,使用最好的版本号只是来自Subversion的当前版本号。是否有一种简单的方法将这个数字挂接到(我的情况下为C++)头文件或其他东西,然后我可以在代码中获取?我想这是一个后提交钩或什么?将Subversion存储库编号获取到代码中
有没有人有任何实施这个(有代码分享,请?)的经验,或者可以建议一个更好的选择? 谢谢。
我想实现一种在代码中记录项目版本的方法,以便在测试时使用它并帮助跟踪错误。 看来,使用最好的版本号只是来自Subversion的当前版本号。是否有一种简单的方法将这个数字挂接到(我的情况下为C++)头文件或其他东西,然后我可以在代码中获取?我想这是一个后提交钩或什么?将Subversion存储库编号获取到代码中
有没有人有任何实施这个(有代码分享,请?)的经验,或者可以建议一个更好的选择? 谢谢。
虽然漂亮,修改关键字伎俩更新只当它在该版本所更改的文件 - 如果你不改变文件,那么它将继续反映旧版本。
如果您希望软件始终反映整个版本号,那么您必须深入研究relevant SVN entries file并提取它,这不是太困难(这是一个XML文件)。
维基百科在their version page上这样做,以指示正在运行的软件的修订; the code is here - 寻找getSvnRevision()方法。
您可以使用svn:keywords
属性启用Rev
关键字。
然后,您可以在代码中使用$Rev$
和更新,以$Rev: 256 $
然后可以分析时SVN就会自动展开......
如果您想要一个完整的项目版本号,这不是正确的事情,因为$ Rev $只在该文件更新时才更改,而不是在项目中的任何内容更新时更改。 – 2008-10-28 13:11:03
两种方式:
嵌入的$ id $或$修订$内的代码。然后在文件上设置svn:keywords =“Id Revision”属性。这将为您提供该源文件的最后修改版本。适用于较小的项目和脚本。
或者,使用Makefile驱动的进程和命令行工具svnversion。 (具体的语言 - 这应该对C/C++的工作)
echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
或用SED和version.h.in一些更复杂的构建脚本。然后只是#include version.h
这会给你存储库版本号,它会随着每次提交/更新而改变,并且可能是大多数项目的更合适的版本号。
注意:我还使用了手动更新的人类可读版本字符串。这个例子将给:版本:1.0.1-r13445
〜Ĵ
您也可以使用SubWCRev,它是TortoiseSVN的一部分。
SubWCRev是Windows控制台程序,可用于读取Subversion工作副本的状态,并可选择在模板文件中执行关键字替换。这通常用作构建过程的一部分,以此作为将工作副本信息合并到正在构建的对象中的一种手段。通常它可能会用于在“关于”框中包含修订号。
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
,添加:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
那么你可以使用宏SVN_REV
在你的代码的任何地方,例如:
printf ("Version: SVN %s\n", SVN_REV);
一个很好的跟上时代的解决方案:
创建一个Makefile
含有以下行(在相同的文件夹YourFile.dox
):
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
而且YourFile.dox
应该包含这样的:
...
PROJECT_NUMBER = "Revision RevNumber"
...
目前:
sed
在.dox与替换RevNumber
输出svnversion
(在你的仓库的主文件夹中执行)并将修改后的文件保存到YourFileDummy.dox
doxygen
上YourFileDummy.dox
执行生成文档
您将不得不递归检查所有条目文件,以查找最高版本号。我想这就是svnversion所做的。 – 2008-10-14 08:28:46