您的位置:首页 > 运维架构 > Linux

在VS2013以及Linux系统中利用SVN自动更新版本号

2016-11-17 14:02 519 查看


1、在VS2013中利用SVN自动更新版本号

(1)、方法一:利用subwcrev.exe中的宏:
$WCREV$ : 获取SVN的版本号
$WCURL$ : 获取SVN的地址
关于subwcrev.exe参见:  http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-subwcrev.html  http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-subwcrev-keywords.html

subwcrev.exe基本格式是: 
SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile] [-nmdfe]

所以需要在VS对应的工程中新建两个文件,一个是SrcVersionFile和DstVersionFile,其中: 

WorkingCopyPath				#工程所在的目录
SrcVersionFile				#含有SubWCRev.exe程序可以替换的宏;
DstVersionFile				#为更新svn之后把宏替换掉以后的目标文件。


例如: 
SrcVersionFile为一个头文件,名字叫Template.Source.Version.h,其内容如下:

#pragma once

#define VER_UMS_HQ_MAJOR    2
#define VER_UMS_HQ_MINOR    2
#define VER_UMS_HQ_SVN  $WCREV$

#define VER_UMS_HQ_REVISION "2.2.$WCREV$.0"
DstVersionFile文件为另外一个头文件,名字叫Source.Version.h,其内容如下:

#pragma once

#define VER_UMS_HQ_MAJOR    2
#define VER_UMS_HQ_MINOR    2
#define VER_UMS_HQ_SVN  8465

#define VER_UMS_HQ_REVISION "2.2.8465.0"
然后在工程属性设置: 
Build Event选项->Pre-Build Event的Command Line中输入: 
subwcrev.exe “./” “./Template.Source.Version.h” “./Source.Version.h”
这样每次用svn更新代码时,svn的项目版本号也更新下来了,并最重替换掉 Template.Source.Version.h中宏WCREV,生成Source.Version.h中的内容。最后在其它文件中就可以使用这个VER_UMS_HQ_REVISION的定义了,例如在程序版本号中使用:
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_UMS_HQ_MAJOR,VER_UMS_HQ_MINOR,VER_UMS_HQ_SVN,0
PRODUCTVERSION VER_UMS_HQ_MAJOR,VER_UMS_HQ_MINOR,VER_UMS_HQ_SVN,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "Zealink.Com"
VALUE "FileDescription", "Zealink.UMSHQ"
VALUE "FileVersion", VER_UMS_HQ_REVISION
VALUE "InternalName", "Zealink.UMS.HQ.dll"
VALUE "LegalCopyright", "Zealink.Com  All rights reserved."
VALUE "OriginalFilename", "Zealink.UMS.HQ.dll"
VALUE "ProductName", "UMS"
VALUE "ProductVersion", VER_UMS_HQ_REVISION
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END


(2)、方法二:利用资源文件

1>、以代码方式打开XXX.rc

2>、修改:
FILEVERSION 1, 0, 0, 1
PRODUCTVERSION 1, 0, 0, 1
为:
FILEVERSION 1, 0, 0, $WCREV$
PRODUCTVERSION 1, 0, 0, $WCREV$
3>、修改:
VALUE "FileVersion", "1.0.0.1"
VALUE "ProductVersion", "1.0.0.1"
为:
VALUE "FileVersion", "1.0.0.$WCREV$"
VALUE "ProductVersion", "1.0.0.$WCREV$"
4>、打开项目属性->生成事件->预先生成事件->命令行

添加:
copy $(ProjectDir)$(ProjectName).rc $(ProjectDir)_$(ProjectName).rc /y
subwcrev . $(Projectdir)$(ProjectName).rc $(Projectdir)$(ProjectName).rc
项目属性->生成事件->后期生成事件->命令行
copy $(ProjectDir)_$(ProjectName).rc $(ProjectDir)$(ProjectName).rc /y
编译后,build自动更新为SVN最后提交版本

参考网址:http://blog.csdn.net/xuly_29/article/details/50623103

参考网址:http://blog.csdn.net/analogous_love/article/details/47293509

 2、在Makefile中定义一个变量

REV=`svn info | grep Revision | awk '{print $2}'`
#或者
REV=`svn info | grep Revision | cut -d " " -f 2`
REV=`svnversion ../../`
而后在编译命令行中加入宏

-DREV=$(REV)


使用命令:

svn info |grep Revision: |awk '{print $2}

参考网址:https://stackoverflow.com/questions/1991526/current-subversion-revision-command

参考网址:http://www.runoob.com/linux/linux-comm-awk.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: