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

简介: tsvn 带有一个命令行程序 subwcrev.exe. 可以对一个指定文件进行一些宏替换, 比如: 将 $WCREV$ 替换成当前版本号. 这个是最有用的. 详细帮助见http://tortoisesvn.
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 宏.
目录
相关文章
SVN 将文件还原到之前的指定版本
SVN 将文件还原到之前的指定版本
2325 1
SVN 将文件还原到之前的指定版本
【IntelliJ IDEA】idea 2018版本中没有SVN按钮或者图标的解决方法
IntelliJ IDEA打开带SVN信息的项目不显示SVN信息,项目右键SVN以及图标还有Changes都不显示
329 0
【IntelliJ IDEA】idea 2018版本中没有SVN按钮或者图标的解决方法
|
Android开发
Android Studio 用svn回退版本、svn恢复到指定版本、一键恢复 撤回修改
Android Studio 用svn回退版本、svn恢复到指定版本、一键恢复 撤回修改
565 0
Android Studio 用svn回退版本、svn恢复到指定版本、一键恢复 撤回修改
|
数据安全/隐私保护
【SVN】关于SVN创建多个版本库共用权限和密码并且设置钩子同步web目录
【SVN】关于SVN创建多个版本库共用权限和密码并且设置钩子同步web目录
162 0
【SVN】关于SVN创建多个版本库共用权限和密码并且设置钩子同步web目录
|
存储 Android开发 数据安全/隐私保护
版本控制软件SVN
版本控制软件SVN的使用流程介绍
|
应用服务中间件
记一次SVN误删除操作和Tomcat版本与操作系统不兼容 问题分析及解决的过程(下)
记一次SVN误删除操作和Tomcat版本与操作系统不兼容 问题分析及解决的过程(下)
136 0
记一次SVN误删除操作和Tomcat版本与操作系统不兼容 问题分析及解决的过程(下)
|
应用服务中间件
记一次SVN误删除操作和Tomcat版本与操作系统不兼容 问题分析及解决的过程(上)
记一次SVN误删除操作和Tomcat版本与操作系统不兼容 问题分析及解决的过程(上)
151 0
记一次SVN误删除操作和Tomcat版本与操作系统不兼容 问题分析及解决的过程(上)
Subversion Revision Keywords(SVN 修订版本关键字)
Subversion Revision Keywords:HEAD、BASE、COMMITTED、PREV
158 0
Subversion Revision Keywords(SVN 修订版本关键字)