我想实现一种在代码中记录项目版本的方法,以便在测试时使用,并帮助跟踪错误。看起来最好的版本号应该是Subversion当前的版本号.有没有一种简单的方法将这个数字挂接到一个(在我的例子中是C++)头文件或其他文件中,然后我可以在代码中得到它?我猜这是一个post commit hook还是什么?有没有人有任何经验,实现这一点(与代码分享,请?),或者可以提出更好的替代方案?- 谢谢-谢谢
6qftjkof1#
两种方式:在代码中嵌入 $Id$ 或 $Revision$。然后在文件上设置 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~J
g2ieeal72#
虽然很漂亮,但revision关键字技巧只会在该版本中更改文件时更新文件-如果您不更改文件,那么它将继续反映旧版本。如果您希望软件始终反映整个修订号,那么您必须深入研究relevant SVN entries file并将其提取出来,这并不太困难(它是一个XML文件)。Wikipedia在their version page上这样做,以指示正在运行的软件的修订版本; the code is here-查找**getSvnRevision()**方法。
00jrzges3#
你也可以使用TortoiseSVN的SubWCRev。
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
qlvxas9a4#
在Makefile中,添加:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"' CFLAGS := $(SVNDEV) ...
字符串然后你可以在代码中的任何地方使用宏SVN_REV,例如:
SVN_REV
printf ("Version: SVN %s\n", SVN_REV);
型
sh7euo9m5#
您可以使用svn:keywords属性来启用Rev关键字。然后你可以在你的代码中使用$Rev$,当更新到$Rev: 256 $时,SVN会自动扩展它,然后可以解析...Subversion手册的更多信息
svn:keywords
Rev
$Rev$
$Rev: 256 $
np8igboo6#
一个好的最新解决方案:创建一个包含以下行的Makefile(与YourFile.dox在同一个文件夹中):
Makefile
YourFile.dox
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
字符串YourFile.dox应该包含以下内容:
... PROJECT_NUMBER = "Revision RevNumber" ...
型现在:
sed
svnversion
RevNumber
YourFileDummy.dox
doxygen
xesrikrc7#
在文件的顶部添加以下内容应该可以达到目的
[Subversion] Revision = "$Revision: $" Author = "$Author: $" Date = "$Date: $" HeadURL = "$HeadURL: $"
字符串
7条答案
按热度按时间6qftjkof1#
两种方式:
在代码中嵌入 $Id$ 或 $Revision$。然后在文件上设置 svn:keywords=“Id Revision” 属性.这将为您提供该源文件的最后修改版本。适用于较小的项目和脚本。
或者,使用Makefile驱动的进程和命令行工具svnversion.(语言特定-这应该适用于C/C++)
字符串
或者使用sed和version.h.in编写一些更复杂的构建脚本。然后只需 #include version.h
这会给予你一个仓库版本号,它会随着每次提交/更新而改变,对于大多数项目来说,这可能是一个更合适的版本号。
注意:我还使用了一个人工可读的版本字符串,并手动更新。示例给予:版本:1.0.1-r13445
~J
g2ieeal72#
虽然很漂亮,但revision关键字技巧只会在该版本中更改文件时更新文件-如果您不更改文件,那么它将继续反映旧版本。
如果您希望软件始终反映整个修订号,那么您必须深入研究relevant SVN entries file并将其提取出来,这并不太困难(它是一个XML文件)。
Wikipedia在their version page上这样做,以指示正在运行的软件的修订版本; the code is here-查找**getSvnRevision()**方法。
00jrzges3#
你也可以使用TortoiseSVN的SubWCRev。
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
qlvxas9a4#
在Makefile中,添加:
字符串
然后你可以在代码中的任何地方使用宏
SVN_REV
,例如:型
sh7euo9m5#
您可以使用
svn:keywords
属性来启用Rev
关键字。然后你可以在你的代码中使用
$Rev$
,当更新到$Rev: 256 $
时,SVN会自动扩展它,然后可以解析...Subversion手册的更多信息
np8igboo6#
一个好的最新解决方案:
创建一个包含以下行的
Makefile
(与YourFile.dox
在同一个文件夹中):字符串
YourFile.dox
应该包含以下内容:型
现在:
sed
用svnversion
的输出(在存储库的主文件夹中执行)替换.dox中的RevNumber
,并将修改后的文件保存到YourFileDummy.dox
1.在
YourFileDummy.dox
上执行doxygen
以生成文档1.您的文档现在将包含修订号!
xesrikrc7#
在文件的顶部添加以下内容应该可以达到目的
字符串