• 将 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 宏.
  • 相关阅读:
    代码坏味道
    外包对程序员发展有什么弊端?
    前端接口神器
    使用Autofac
    在 WASI 上运行 .NET 7 应用程序
    在非k8s 环境下 的应用 使用 Dapr Sidekick for .NET
    一个简单的模拟实例说明Task及其调度问题
    xxljob 小结
    [LeetCode] 1291. Sequential Digits 顺次数
    [LeetCode] 1289. Minimum Falling Path Sum II 下降路径最小和之二
  • 原文地址:https://www.cnblogs.com/lidabo/p/3046302.html
Copyright © 2020-2023  润新知