天天看點

用svn管理軟體版本資訊

svn服務提供了一些宏定義,大多與版本管理相關的環境變量,通過SubWCRev可以将這些宏資訊取值用于我們的産品版本資訊裡

本人示例代碼中采用的是在redhat6.5中安裝subversion服務,在win安裝svn用戶端TortoiseSVN。

首先建立一個檔案org_version.h(如下),并将該檔案add及送出到svn服務上:

#pragma once

//svn取值

#define VERSION_BUILD_NUMBER $WCREV$

#define STR_BUILD_NUMBER "$WCREV$"

#define STR_VERSION_BUILD "(B$WCREV$ $WCNOW$)"

#define STR_VERSION_DATE "$WCDATE$"

#define STR_VERSION_URL "$WCURL$"

#define STR_VERSION_NOW "$WCNOW$"

#define NSTR_VERSION_NOW $WCNOW$

//自定義

#define STR_VERSION_VERSION    "V1.2.$WCREV$"

#define STR_VERSION_COMPANY    "*** company"

#define STR_VERSION_FILEDESC    "you file desc"

#define STR_VERSION_FILEVER    STR_VERSION_VERSION

#define STR_VERSION_LEGAL    "*** All rights reserved"

#define STR_VERSION_PRODUCTNAME    "you software name"

#define STR_VERSION_TELE    "+86 tel"

#define STR_VERSION_FAX        "+86 fax"    

#define STR_VERSION_WEB        "www.youweb.com"

#define STR_VERSION_POSTCODE    "post code"

#define STR_VERSION_ADDRESS    "address"

檔案中帶$ 的是需要從svn服務取值的宏

win+R啟動指令視窗,cd到所在目錄通過SubWCRev(目錄  源檔案  目标檔案)指令,如

SubWCRev  ./   version.h__   version.h(當然實際工作中可以将該指令配置在工程檔案[例如makefile或vs代碼檔案的指令選項]中在編譯時自行調用)

将在源檔案所在目錄生成一個目标檔案version.h,

#define VERSION_BUILD_NUMBER 5

#define STR_BUILD_NUMBER "5"

#define STR_VERSION_BUILD "(B5 2017/04/04 21:18:43)"

#define STR_VERSION_DATE "2017/04/04 21:18:39"

#define STR_VERSION_URL "svn://192.168.163.128/common/muparser"

#define STR_VERSION_NOW "2017/04/04 21:18:43"

#define NSTR_VERSION_NOW 2017/04/04 21:18:43

#define STR_VERSION_VERSION    "V1.2.5"

我們就可以在工程中引用該檔案,取得我們需要的資訊對軟體産品進行描述,例如我們可以在代碼中引用這些資訊表明産品的版本,生産日期等等

也可以加入資源檔案中進行描述,例如.rc檔案,看下面的示列:

#if defined(UNDER_CE)

#include <winbase.h>

#else

#include <winver.h>

#endif

#include "version.h"

/////////////////////////////////////////////////////////////////////////////

//

// Version

VS_VERSION_INFO VERSIONINFO

FILEVERSION 3,2,2,VERSION_BUILD_NUMBER

PRODUCTVERSION 3,2,2,VERSION_BUILD_NUMBER

FILEFLAGSMASK 0x17L

#ifdef _DEBUG

FILEFLAGS 0x1L

FILEFLAGS 0x0L

FILEOS 0x4L

FILETYPE 0x1L

FILESUBTYPE 0x0L

BEGIN

    BLOCK "StringFileInfo"

    BEGIN

        BLOCK "080404b0"

        BEGIN

            VALUE "CompanyName",         STR_VERSION_COMPANY

            VALUE "FileDescription",     STR_VERSION_FILEDESC

            VALUE "FileVersion",         STR_BUILD_NUMBER

            VALUE "InternalName",         STR_VERSION_PRODUCTNAME

            VALUE "LegalCopyright",     STR_VERSION_LEGAL

            VALUE "OriginalFilename",     STR_VERSION_PRODUCTNAME

            VALUE "ProductName",         STR_VERSION_PRODUCTNAME

            VALUE "ProductVersion",     STR_VERSION_VERSION

        END

    END

    BLOCK "VarFileInfo"

        VALUE "Translation", 0x804, 1200

END

//////////////////////////////////

//ico

IDI_ICON1           ICON   DISCARDABLE   "iconApp.ico"

這樣就不用生成及釋出軟體是自己修改資源檔案

當軟體出現bug想回溯檢視是就能根據版本号調出對應的曆史代碼

繼續閱讀