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