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里的版本号了