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想回溯檢視是就能根據版本号調出對應的曆史代碼