我想实现一种在代码中记录项目版本的方法,以便在测试时使用它并帮助跟踪错误。看起来最好使用的版本号就是 Subversion 的当前修订版号。有没有一种简单的方法可以将这个数字挂接到(在我的例子中是C++)头文件或其他文件中,然后我可以在代码中获取它?我想这是一个提交后钩子什么的?

有谁有实现此功能的经验(请分享代码?),或者可以建议更好的替代方案吗?谢谢。

有帮助吗?

解决方案

虽然很漂亮,但修订版关键字技巧仅在该修订版中发生更改时更新文件 - 如果您不更改文件,那么它将继续反映旧修订版。

如果您希望软件始终反映总体修订号,那么您必须深入研究 相关SVN条目文件 并提取它,这并不太困难(它是一个 XML 文件)。

维基百科是这样做的 他们的版本页面 指示正在运行的软件的版本; 代码在这里 - 寻找 getSvnRevision() 方法。

其他提示

两种方式:

嵌入 $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 $ 然后可以解析...

有关 Subversion 手册的更多信息

一个很好的最新解决方案:

创建一个 Makefile 包含以下行(与以下行位于同一文件夹中) YourFile.dox):

sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox

YourFile.dox 应该包含这个:

...
PROJECT_NUMBER         = "Revision RevNumber"
...

现在:

  1. sed 取代 RevNumber 在 .dox 中,输出为 svnversion (在存储库的主文件夹中执行)并将修改后的文件保存到 YourFileDummy.dox
  2. doxygen 执行于 YourFileDummy.dox 生成文档
  3. 您的文档现在将包含修订号!
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top