1. 程式人生 > >VS之版本-編譯時自動生成版本-自動獲取svn版本號

VS之版本-編譯時自動生成版本-自動獲取svn版本號

原理

SVN中的可執行檔案SubWCRev.exe,該檔案可以檢視工作目錄的當前svn號並且儲存在變數$WCREV$中。因此,可以先寫一個批處理,然後在專案的預生成命令中執行該批處理檔案。

VS編譯時自動化生成版本示例:

在需要新增版本的工程目錄下新建資料夾(以Setup為例), 在svn 客戶端的安裝目錄下找到Subwcrev.exe並複製到Setup資料夾下(Subwcrev.exe 可執行檔案通常在 svn 客戶端的安裝目錄下,比如TortoiseSVN 是在其安裝目錄的bin資料夾下),另外新建批處理檔案GenerateRevision.bat和生成版本模板檔案version_template.h,目錄如下圖。 
這裡寫圖片描述

SubWCRev.exe用法

#SubWCRev.exe WorkingCopyPath Template DestFile

引數說明:
    WorkingCopyPath:要檢視的工作目錄路徑,一般取解決方案目錄
    Template:模版檔案
    DestFile:生成的目標檔案
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

GenerateRevision.bat

"SubWCRev.exe" "%~dp0.." "%~dp0version_template.h" "%~dp0../工程目錄/version.h" %1
  • 1
  • 1
%~dp0      標識當前目錄
%1          當前輸入的第一個引數
  • 1
  • 2
  • 1
  • 2

version_template.h

#define FILEVER        1,0,0,$WCREV$
#define PRODUCTVER     1,0,0,$WCREV$
#define STR_FILEVER     "1,0,0,$WCREV$"
#define STR_PRODUCTVER     "1,0,0,$WCREV$"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注意version_template.h的最後要加一個換行符,不然編譯時會以下錯誤,原因是version.h末尾缺少換行符 
這裡寫圖片描述

現在雙擊GenerateRevision.bat生成目標檔案,在”%~dp0../工程目錄”目錄下找到version.h。 
這裡寫圖片描述

接下來在解決方案中新增現有項xxx.rc檔案->雙擊xxx.rc檔案開啟資源檢視->選中xxx.rc有右鍵“新增資源”->選擇Version 
這裡寫圖片描述

這裡寫圖片描述

修改xxx.rc檔案內容,還有版本的其實資訊在對應字串修改 
這裡寫圖片描述

最後把GenerateRevision.bat新增到預編譯檔案 
這裡寫圖片描述

現在自動化生成版本配置完成,每提交一次程式碼,SVN上會記錄一個版本資訊,程式在每次預編譯的時候執行會GenerateRevision.bat檔案通過SubWCRev.exe獲得最新的版本號。

感謝http://blog.csdn.net/zx3517288/article/details/50464799