将 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 宏.

时间: 2024-10-16 03:19:47

将 svn 版本修订号写入程序版本信息的相关文章

[C#] 常用工具类——应用程序属性信息访问类

using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace Utils { /// <summary> /// <para> </para> /// 常用工具类--应用程序属性信息访问类 /// <para> -------------------------------------------</para&g

《树莓派用户指南(第3版)》——1.5 关于Model B的PCB版本修订历史

1.5 关于Model B的PCB版本修订历史 尽管树莓派最新版的型号Model B+目前有着512 MB的内存和4个USB端口,但这些都不会是一成不变的.除了Model B+外,标准的Model B还有两个变种的型号.如果你买到的是一个双面的树莓派Model B,或者你以前买到过,那也许是最早的一个版本-Rev 1. 1.5.1 第1个版本(Rev 1) 最原始的树莓派Model B第一版(Rev 1),只有256 MB的RAM.它的GPIO端口也稍有不同.虽然插针的数量和位置看上去和之后的版

怎样在VS2005,VS2008下里用SVN的SubWCRev自增修订号 .

  为了使软件版本号的最后一位,即修订号与由svn管理的代码库修订号保持一致并自动更新,可以利用VS2005的生成事件和 svn 中的 subwcrev 程序实现,步骤如下: 工具/原料 Visual Studio 2005 SVN 客户端( TortoiseSVN 或其他 ) 步骤/方法 编写一个模板文件,比如取名为 version_template.h,内容如下 #ifndef _VERSION_H_#define _VERSION_H_ #define VER_MAJOR 1#define

php 集成环境-我想问下php的集成环境的php版本和安装的php程序版本之间怎么样才能使用呢?

问题描述 我想问下php的集成环境的php版本和安装的php程序版本之间怎么样才能使用呢? 我想问下php的集成环境的php版本和安装的php程序版本之间怎么样才能正常使用呢?就是说哪个版本高一些 解决方案 可以参考下这篇文章http://blog.csdn.net/oneym/article/details/48050487 解决方案二: wamp集成环境下升级php版本集成的PHP环境的使用Linux环境Nginx安装多版本PHP

站长门不要着急升级你的程序版本

对于很多中小站长来说,感觉最新鲜的事情之一也许是自己使用的源代码出新版本了.很多人都迫不及待的升级.测试,希望自己的网站在最短的时间内成为第一批 应用新功能的用户.我以前也是这样一个人.无论是Discuz!还是wp还是bo-blog,我都可以说是在第一时间升级的.可是现在回头看看,也许等待 我们去做的事情太多,而我们关注的事情又是那么的不重要. 所以我要提出一个反面的论调:不要着急升级你的程序版本. 其实原因的话,都是我自己的经验之谈,也许各人和各人的经验不同,但我从2003年开始接触网站管理,

基于Web的程序版本检查

现在的很多程序都可以通过 Internet 进行版本更新,Windows 操作系统本身的"Windows Update"就是一个典型的例子.要实现这种特性,首先必须对应用程序的版本进行检查.那么如何通过 Internet 对自己的程序进行版本检查呢?本文将通过实际的例子程序来示范实现细节. 在进入正题之前,我想先罗嗦几句,说说与此文内容有关的个人好恶:我很讨厌程序显示那些必须让用户干预的消息框,这种消息框很烦人,尤其是问你要不要更新的那种对话框.碰到这种情况我总是回答"No&

Win7操作系统安装IE10提示 安装前需要更新与安装程序版本解决办法

安装IE10浏览器时提示错误的 Internet Explorer安装程序版本 故障现象: Win7操作系统在安装IE10浏览器时会弹出对话框,提示错误的Ieternet Explorer 安装程序版本. 原因分析: 之所以会出现这种提示,是因为下载的IE10语言版本与系统的语言版本不符导致的,这种情况多出现在国外购置的计算机中,因为系统初始安装的语言版本可能是英文或其他语言版本,后来才安装中文语言包,因此此时安装IE10浏览器时务必要先确认计算机的Win7语言版本. 解决方案: 在微软官方网站

在IIS中改变ASP.NET程序版本的实现方法附批处理代码_服务器

在windows2003的iis6.0当中,在装过.NETFRAMEWORK1.1,和.NETFRAMEWORK2.0之后,在新建的ASP.NET应用程序中,查看属性,会出现ASP.NET的选项卡,在此可以更改该WEB应用程序是基于哪个框架运行的. 但是最近在装了64位的WINDOWSXP PROFESSIONAL后,找不到此选项卡了,只能通过如下方式修改: 在IIS管理器中,选择指定的WEB应用程序,右键-->属性-->configuration-->mapping-->根据需要

svn 回退/更新/取消至某个版本命令详解【转】

转自:http://www.cnblogs.com/mfryf/p/4654110.html 1. 取消Add/Delete 取消文件 svn revert 文件名 取消目录 svn revert --depth=infinity 目录名 2. 回退版本 方法1: 用svn merge 1) 先 svn up,保证更新到最新的版本,如20: 2) 然后用 svn log ,查看历史修改,找出要恢复的版本,如10 .如果想要更详细的了解情况,可以使用svn diff -r 10:20 [文件或目录