zoukankan      html  css  js  c++  java
  • Visual studio每次build自动增加版本号

    关键词:visual studio,rc file,VS_VERSION_INFO,FILEVERSION,PRODUCTVERSION

    目标:希望每次在vs中编译项目时,生成的可执行程序版本号自动+1

    环境:vs2010,python 2.7.8

    步骤:

    1.在rc文件同目录下添加version.h头文件,内容如下:

    #define RELEASE_VER 1  // 0: beta version; 1: release version
    #define RELEASE_DATE "Sep 01 2014" // Mmm dd yyyy; only used for RELEASE_VER=1
    
    #define RELEASE_VER_MAIN  1 // version number (binary)
    #define RELEASE_VER_MAIN2 0
    #define RELEASE_VER_SUB   0
    #define RELEASE_VER_SUB2  0 
    
    // version number (string)
    #define TOSTRING2(arg) #arg
    #define TOSTRING(arg) TOSTRING2(arg)
    #define RELEASE_VER_STR     TOSTRING(RELEASE_VER_MAIN) "." TOSTRING(RELEASE_VER_MAIN2) "." TOSTRING(RELEASE_VER_SUB) "." TOSTRING(RELEASE_VER_SUB2)

    2.用文本编辑器(notepad++)打开rc文件,修改文件内容

    // Microsoft Visual C++ generated resource script.
    //
    #include "resource.h"
    
    #define APSTUDIO_READONLY_SYMBOLS
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 2 resource.
    //
    #include "afxres.h"
    
    /////////////////////////////////////////////////////////////////////////////
    #undef APSTUDIO_READONLY_SYMBOLS
    
    /////////////////////////////////////////////////////////////////////////////
    // Chinese (Simplified, PRC) resources
    
    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
    LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
    
    #ifdef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // TEXTINCLUDE
    //
    
    1 TEXTINCLUDE 
    BEGIN
        "resource.h"
    END
    
    2 TEXTINCLUDE 
    BEGIN
        "#include ""afxres.h""
    "
        ""
    END
    
    3 TEXTINCLUDE 
    BEGIN
        "
    "
        ""
    END
    
    #endif    // APSTUDIO_INVOKED
    
    
    /////////////////////////////////////////////////////////////////////////////
    //
    // Version
    //
    
    VS_VERSION_INFO VERSIONINFO
     FILEVERSION 1,0,0,1
     PRODUCTVERSION 1,0,0,1
     FILEFLAGSMASK 0x3fL
    #ifdef _DEBUG
     FILEFLAGS 0x1L
    #else
     FILEFLAGS 0x0L
    #endif
     FILEOS 0x40004L
     FILETYPE 0x1L
     FILESUBTYPE 0x0L
    BEGIN
        BLOCK "StringFileInfo"
        BEGIN
            BLOCK "080404b0"
            BEGIN
                VALUE "CompanyName", "TODO: <Company name>"
                VALUE "FileDescription", "TODO: <File description>"
                VALUE "FileVersion", "1.0.0.1"
                VALUE "InternalName", "VersionT.exe"
                VALUE "LegalCopyright", "Copyright (C) 2014"
                VALUE "OriginalFilename", "VersionT.exe"
                VALUE "ProductName", "VersionTest"
                VALUE "ProductVersion", "1.0.0.1"
            END
        END
        BLOCK "VarFileInfo"
        BEGIN
            VALUE "Translation", 0x804, 1200
        END
    END
    
    #endif    // Chinese (Simplified, PRC) resources
    /////////////////////////////////////////////////////////////////////////////
    
    
    
    #ifndef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 3 resource.
    //
    
    
    /////////////////////////////////////////////////////////////////////////////
    #endif    // not APSTUDIO_INVOKED
    修改前的rc文件内容
    // Microsoft Visual C++ generated resource script.
    //
    #include "resource.h"
    #include "version.h"
    
    #define APSTUDIO_READONLY_SYMBOLS
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 2 resource.
    //
    #include "afxres.h"
    
    /////////////////////////////////////////////////////////////////////////////
    #undef APSTUDIO_READONLY_SYMBOLS
    
    /////////////////////////////////////////////////////////////////////////////
    // Chinese (Simplified, PRC) resources
    
    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
    LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
    
    #ifdef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // TEXTINCLUDE
    //
    
    1 TEXTINCLUDE 
    BEGIN
        "resource.h"
    END
    
    2 TEXTINCLUDE 
    BEGIN
        "#include ""afxres.h""
    "
        ""
    END
    
    3 TEXTINCLUDE 
    BEGIN
        "
    "
        ""
    END
    
    #endif    // APSTUDIO_INVOKED
    
    
    /////////////////////////////////////////////////////////////////////////////
    //
    // Version
    //
    
    VS_VERSION_INFO VERSIONINFO
     FILEVERSION RELEASE_VER_MAIN,RELEASE_VER_MAIN2,RELEASE_VER_SUB,RELEASE_VER_SUB2
     PRODUCTVERSION RELEASE_VER_MAIN,RELEASE_VER_MAIN2,RELEASE_VER_SUB,RELEASE_VER_SUB2
     FILEFLAGSMASK 0x3fL
    #ifdef _DEBUG
     FILEFLAGS 0x1L
    #else
     FILEFLAGS 0x0L
    #endif
     FILEOS 0x40004L
     FILETYPE 0x1L
     FILESUBTYPE 0x0L
    BEGIN
        BLOCK "StringFileInfo"
        BEGIN
            BLOCK "080404b0"
            BEGIN
                VALUE "CompanyName", "TODO: <Company name>"
                VALUE "FileDescription", "TODO: <File description>"
                VALUE "FileVersion", RELEASE_VER_STR
                VALUE "InternalName", "VersionT.exe"
                VALUE "LegalCopyright", "Copyright (C) 2014"
                VALUE "OriginalFilename", "VersionT.exe"
                VALUE "ProductName", "VersionTest"
                VALUE "ProductVersion", RELEASE_VER_STR
            END
        END
        BLOCK "VarFileInfo"
        BEGIN
            VALUE "Translation", 0x804, 1200
        END
    END
    
    #endif    // Chinese (Simplified, PRC) resources
    /////////////////////////////////////////////////////////////////////////////
    
    
    
    #ifndef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 3 resource.
    //
    
    
    /////////////////////////////////////////////////////////////////////////////
    #endif    // not APSTUDIO_INVOKED
    修改后的rc文件内容

    3.把addVersionNum.py文件放到version.h同目录下(不一定要同目录,也可以用相对路径)
    在项目property->Build Events->Pre-Build Event的CommandLine中添加如下语句:

    python.exe $(ProjectDir)addVersionNum.py

    python脚本内容如下(PS:很低级的python写法,但是能work 说不定熟悉python正则的高手一行代码就能搞定)

    #author: jakubfong
    #version: 1.0 2014-10-27
    
    import sys
    import string
    import re
    
    f = open(r'version.h', 'r+')
    lines = f.readlines()
    data = []
    for line in lines:
            tmp = re.split('s+', line)
            if len(tmp) > 2 and tmp[1] == 'RELEASE_VER_SUB2':
                tmp[2] = str(int(tmp[2])+1);
                strtmp = ' '.join(tmp)
                strtmp += '
    '
                data.append(strtmp)
                print "###"+strtmp
            else:
                data.append(line)
    f.seek(0)
    f.writelines(data)
    f.close()

    work done

    参考链接:http://stackoverflow.com/questions/16626329/how-can-i-modify-vs-version-info-from-the-cpp-file?newreg=fee2fc67f78c4cd6a8b0e66688691b58

  • 相关阅读:
    html5-1 网页结构描述
    [搜索] hdu 4016 Magic Bitwise And Operation
    备忘录模式设计模式入门Memento
    编译的依赖不能vs的release工程
    【web开发学习笔记】Structs2 Action学习笔记(两)
    ios学习网络------4 UIWebView以三种方式中的本地数据
    坑爹BUG,没有详细的看还真看不出问题
    《Effective C++》:规定44-规定45
    [ACM] poj 1088 滑雪 (内存搜索DFS)
    Balanced Binary Tree(Java代码没有结束,是什么原因???)
  • 原文地址:https://www.cnblogs.com/bugchecker/p/auto-add-version-num-on-each-build-under-visual-studio.html
Copyright © 2011-2022 走看看