首先在有SVN版本控制的qt工程pro檔案中加入以下幾行
SVN_BIN_PATH = C:/Program Files/TortoiseSVN/bin
BEFORE_LINK_CMD_LINE = $$SVN_BIN_PATH/SubWCRev.exe $$PWD/ $$PWD/myapp.rc.template $$PWD/myapp.rc
QMAKE_PRE_LINK += $$quote($$BEFORE_LINK_CMD_LINE)
RC_FILE += $$PWD/myapp.rc
SVN_BIN_PATH 自定義變量,存放SVN bin目錄,根據需要換成自己的SVN安裝目錄 BEFORE_LINK_CMD_LINE 自定義變量,存放動态更新rc資源檔案的指令,這個指令是關鍵,詳情可以搜尋SVN SubWCRev.exe用法,其中myapp.rc.template 這個檔案很重要,SubWCRev.exe會替換這個檔案中的$WCREV$變量為SVN版本号,生成一個新的檔案myapp.rc,我們的Qt工程就是使用myapp.rc這個資源檔案來生成exe的版本資訊 QMAKE_PRE_LINK pro官方變量,表示編譯前執行内容 RC_FILE pro 官方變量,會根據該檔案資訊,生成exe版本資訊
myapp.rc.template檔案見下文 ,如果需要添加應用程式的圖示,在放一個myapp.ico檔案,最後建一個myapp.rc的空檔案,這三個檔案放在pro 同級目錄下,myapp.rc.template檔案第一行就是添加ico圖示資訊,引号裡邊是圖示路徑,可使用相對路徑和絕對路徑,然後構成生成的exe就有版本資訊了,注意第一次建構版本資訊會生成失敗,可能因為第一次myapp.rc這個檔案是空的,建議每次SVN上傳的時候将這兩個檔案上傳
myapp.rc.template
IDI_ICON1 ICON "myapp.ico"
#if defined(UNDER_CE)
#include <winbase.h>
#else
#include <winver.h>
#endif
VS_VERSION_INFO VERSIONINFO
FILEVERSION 6,0,0,$WCREV$
PRODUCTVERSION 6,0,0,$WCREV$
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x21L
#else
FILEFLAGS 0x20L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080004b0"
BEGIN
VALUE "CompanyName", "XXX"
VALUE "FileDescription", "MyApp Application"
VALUE "FileVersion", "6, 0, 0, $WCREV$"
VALUE "InternalName", "MyApp "
VALUE "LegalCopyright", "Copyright (C) 2021"
VALUE "OriginalFilename", "MyApp .exe"
VALUE "ProductName", "MyApp Application"
VALUE "ProductVersion", "6, 0, 0, $WCREV$"
VALUE "SpecialBuild", "6, 0, 0, $WCREV$"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x800, 1200
END
END