首先在有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