将颠覆存储库编号放入代码中
题
我想实现一种在代码中记录项目版本的方法,以便在测试时使用它并帮助跟踪错误。看起来最好使用的版本号就是 Subversion 的当前修订版号。有没有一种简单的方法可以将这个数字挂接到(在我的例子中是C++)头文件或其他文件中,然后我可以在代码中获取它?我想这是一个提交后钩子什么的?
有谁有实现此功能的经验(请分享代码?),或者可以建议更好的替代方案吗?谢谢。
其他提示
两种方式:
嵌入 $Id$ 或者 $修订$ 在代码内。然后设置 svn:keywords="修订 ID" 文件上的属性。这将为您提供该源文件的最后修改版本。适合较小的项目和脚本。
或者,使用 Makefile 驱动的进程和命令行工具 svnversion。(特定于语言 - 这应该适用于 C/C++)
echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
或者一些使用 sed 和 version.h.in 的更复杂的构建脚本。然后就 #include 版本.h
这将为您提供存储库版本号,该版本号将随着每次提交/更新而变化,并且对于大多数项目来说可能是更合适的版本号。
笔记:我还使用了手动更新的人类可读版本字符串。该示例给出: 版本:1.0.1-r13445
~J
您还可以使用 SubWCRev,它是 TortoiseSVN 的一部分。
SubWCRev 是 Windows 控制台程序,可用于读取 Subversion 工作副本的状态并可选择在模板文件中执行关键字替换。这通常用作构建过程的一部分,作为将工作副本信息合并到正在构建的对象中的一种方法。通常,它可用于在“关于”框中包含修订号。
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
在你的 Makefile 中添加:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
然后你可以使用宏 SVN_REV
代码中的任何位置,例如:
printf ("Version: SVN %s\n", SVN_REV);
您可以使用 svn:keywords
属性以启用 Rev
关键词。
然后您可以使用 $Rev$
在您的代码中,SVN 会在更新到时自动扩展它 $Rev: 256 $
然后可以解析...
一个很好的最新解决方案:
创建一个 Makefile
包含以下行(与以下行位于同一文件夹中) YourFile.dox
):
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
和 YourFile.dox
应该包含这个:
...
PROJECT_NUMBER = "Revision RevNumber"
...
现在:
sed
取代RevNumber
在 .dox 中,输出为svnversion
(在存储库的主文件夹中执行)并将修改后的文件保存到YourFileDummy.dox
doxygen
执行于YourFileDummy.dox
生成文档- 您的文档现在将包含修订号!