将 svn 版本修订号写入程序版本信息

tsvn 带有一个命令行程序 subwcrev.exe. 可以对一个指定文件进行一些宏替换, 比如: 将 $WCREV$ 替换成当前版本号. 这个是最有用的.
详细帮助见 http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-subwcrev-keywords.html
以 vc6 为例, 文件的版本信息保存在 rc 文件. 编译成 res
文件, 然后和其他 obj 一起 link. 现在的思路就是. 编辑 rc 文件, 将版本号比如 2.2.4.0 改成 2.2.4.$WCREV$, 在每次
link 之前, 先用 subwcrev.exe 处理 rc 文件, 进行宏替换. 然后调用 rc.exe 编译替换后的新文件. 生成 res 之后一起
link.
. 修改 rc 文件的 versioninfo 段成如下:

#ifdef _AUTOVERSION

  FILEVERSION 2,2,4,$WCREV$

  PRODUCTVERSION 2,2,4,$WCREV$

#else

  FILEVERSION 2,2,4,0

  PRODUCTVERSION 2,2,4,0

#endif


#ifdef _AUTOVERSION

    VALUE "FileVersion", "2, 2, 4, $WCREV$"

    VALUE "ProductVersion", "2, 2, 4, $WCREV$"

#else

    VALUE "FileVersion", "2, 2, 4, 0"

    VALUE "ProductVersion", "2, 2, 4, 0"

#endif          

其实也就是加上了条件编译. 默认情况下没有定义
_AUTOVERSION, 则使用原来的 fileversion, productversion. 如果定义了 _AUTOVERSION,
则使用新的版本信息.
在项目属性找到 pre-link 页. 在其中增加:
subwcrevsubwcrev.exe . myprogram.rc myprogram.rc_
rc.exe /l 0×804 /fo"releasemyprogram.res" /d "_AUTOVERSION" /d "_AFXDLL"
"myprogram.rc_"
第一条命令处理 myprogram.rc , 生成 myprogram.rc_

第二条命令编译 myprogram.rc_ 为 myprogram.res, 注意它的路径. 这里是 release 版的默认路径.
原则就是这里生成的 res 替换原来的 res 文件.
按 f7, build. 现在版本信息已经刷新了. 每次向 svn 提交. 版本都会更新.

不过我们还可以更进一步. 将版本信息, 编译时间等写入到关于对话框中.
其实关键还是 pre-link.

. 创建一个文件 buildtime.cpp, 内容如下:

const char*szBuildTime = "Build on $WCNOW$";
const char*szFullVersion="MyProgram
2.2.4.$WCREV$$WCMODS?+:$$WCMIXED?#:$";
. 在关于对话框 OnInitDialog() 中加入:

extern const char* szBuildTime;

extern const char* szFullVersion;

SetDlgItemText(IDC_BUILDTIME, szBuildTime);

SetDlgItemText(IDC_VERSION, szFullVersion);

. 在 pre-link 再加上两条:
subwcrevsubwcrev.exe . buildtime.cpp buildtime_.cpp
cl /c /nologo /FoReleasebuildtime.obj /MT buildTime_.cpp
原理和 rc 文件一样. 先替换, 后编译. 同样要保证生成的
buildtime.obj 覆盖原来的 buildtime.obj
大功告成.
不过有一点要注意. vc6 的资源编辑器在每次编辑资源之后都重新生成
rc 文件. 也就是说, 会删除我们对 rc 的修改. 还没有找到好的办法, 现在只能是每次编辑资源之后再手工添加一下条件编译的部分. 建议在项目进入 beta
之后再加上版本信息. 因为这个时候程序的资源一般都不会变动了.
 
另外, 虽然这里是以 vc6 为例, 但也可以应用到 vc2003,
vc2005 等编译环境.
后记: 还可以考虑用程序自动修改. 找到 FILEVERSION,
将后面的版本替换成 FILEVERSION 2,2,4,$WCREV$, 然后再用 subwcrev 替换. 再用 rc 编译. 这样还不用定义
_AUTOVERSION 宏.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值