zoukankan      html  css  js  c++  java
  • 将 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 宏.
  • 相关阅读:
    XML WebService完全实例详细解析
    List (Java 2 Platform SE 5.0)
    frameset
    关于在outlook2007里面编辑签名的问题
    关于javax.servlet.Http.*;不能被引用的问题
    select标签HTML,刚做地。
    UIButton中setTitleEdgeInsets和setImageEdgeInsets的使用
    玩转UICollectionViewLayout
    常用公共方法
    cell嵌套UIWebView遇到的几个问题
  • 原文地址:https://www.cnblogs.com/lidabo/p/3046302.html
Copyright © 2011-2022 走看看