vs自动获取svn版本

因为公司项目版本一直没有管控起来,遇到过很多麻烦,最近想做到自己动生成版本,查找资料后遇到一点小问题,感觉有点地方没有解释的很清楚,所以稍微修改原作者文章,方便自己之后查看

原理
SVN中的可执行文件SubWCRev.exe,该文件可以查看工作目录的当前svn号并且保存在变量 $WCREV$ 中。因此,可以先写一个批处理,然后在项目的预生成命令中执行该批处理文件。

VS编译时自动化生成版本示例:
在需要添加版本的工程目录下新建文件夹(以Setup为例), 在svn 客户端的安装目录下找到Subwcrev.exe并复制到Setup文件夹下(Subwcrev.exe 可执行文件通常在 svn 客户端的安装目录下,比如TortoiseSVN 是在其安装目录的bin文件夹下),另外新建批处理文件GenerateRevision.bat和 新建生成版本模板文件version_template.h,目录如下图。 
这里写图片描述

SubWCRev.exe用法,这个用法写在 GenerateRevision.bat里
#SubWCRev.exe WorkingCopyPath Template DestFile 参数说明: WorkingCopyPath:要SVN查看的工作目录路径,取解决方案目录,SVN取这个目录的版本号 Template:模版文件,版本号按这个文件的格式生成,在本案例中指 version_template.h DestFile:生成的文件存放的目录,把这个生成的文件放到哪里


GenerateRevision.bat
格式:#SubWCRev.exe WorkingCopyPath Template DestFile
"SubWCRev.exe" " %~ dp0.." " %~ dp0version_template.h" " %~ dp0../XX/version.h" %1


1. % ~dp0 标识当前目录
2. % 1 当前输入的第一个参数


version_template.h
#define FILEVER 1,0,0,$WCREV$ #define PRODUCTVER 1,0,0,$WCREV$ #define STR_FILEVER "1,0,0,$WCREV$" #define STR_PRODUCTVER "1,0,0,$WCREV$"

注意version_template.h的最后要加一个换行符,不然编译时会以下错误,原因是version.h末尾缺少换行符 
这里写图片描述
现在双击GenerateRevision.bat生成目标文件,在“ XX ”目录下就可以找到生成的version.h 文件了,但目录必须存在!
这里写图片描述

写到这里自动生成版本号的就完成了,那么我们需要在项目每次生成的时候都自动读取版本号,就需要用到vs的预编译功能了。直接引入GenerateRevision.bat就行了。
这里写图片描述
不过我这边不知道什么原因引入不成功,重新写的dos命令,"$(ProjectDir)Setup\subwcrev.exe" "$(ProjectDir).." "$(ProjectDir)Setup\version_template.h" "$(ProjectDir)Version/version.h" %1 其实与bat里写的一样。


这样项目里就可以调用version.h里的版本号了