Qt 使用SVN动态生成exe程序可执行文件的版本信息

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

你可能感兴趣的:(exe,svn,qt,c++)