如何使用 C++ 增加 Visual Studio 内部版本号?

问题描述 投票:0回答:5

我有一个 Visual Studio 2008 项目,它生成一个名为:“Game-Release.exe”的文件。

这是在 Project Properties -> C/C++ -> Linker -> General:

下配置的
$(OutDir)\$(ProjectName)-Release.exe

我想通过增加构建号来更进一步,这样我就会有这样的内容:

Game-Release-Build-1002.exe

末尾的数字应该是一个递增的整数。我将在 subversion 上存储构建 exe,所以我想我会发现这很有用(尽管不是必需的)。

也许 Visual Studio 中有一个内置宏可以处理这个问题。很可能我在想我可以有一个包含构建号的文本文件,并让编译器在每次构建项目时读取、使用和增加文件中的数字。然而,我的目标是使该过程尽可能自动化。实现这一目标的最佳方法是什么?

如果您提供意见,请同时提供我们可以共享的代码。谢谢。

c++ c visual-studio-2008 build-automation
5个回答
3
投票

版本控制构建插件似乎可以完成这项工作。

更新:您的问题特别提到使用 Visual Studio 来增加版本,但没有任何自动化。您是否考虑过使用 Nant 和 CI 服务器?这样,就可以轻松地将 SVN 修订号注入到 C++ 的 AssemblyInfo.cs 等效项中。自动在构建服务器上。


3
投票

如果您使用 svn 来版本化您的项目,您可以按照此链接中的说明进行操作,它对我来说非常适合,因为我可以使用其版本信息并比较源代码来跟踪发布应用程序中的错误。

以下所有信息均不包含在链接中:

  • 像这样设置你的rc文件version.rc

    #include "resource.h" 
    #include "version.h" //<-----------Don't forget the include
    /////////////////////////////////////////////////////////////////////////////
    //
    // Version.rc
    //
    VS_VERSION_INFO VERSIONINFO
     FILEVERSION VER_FILE_VERSION
     PRODUCTVERSION VER_PRODUCT_VERSION
     FILEFLAGSMASK 0x17L
    #ifdef _DEBUG
     FILEFLAGS 0x1L
    #else
     FILEFLAGS 0x0L
    #endif
     FILEOS 0x4L
     FILETYPE 0x1L
     FILESUBTYPE 0x0L
    BEGIN
        BLOCK "StringFileInfo"
        BEGIN
            BLOCK "040704b0"
            BEGIN
                VALUE "CompanyName", "Your Company Name"
                VALUE "FileDescription", "Your Application Description"
                VALUE "FileVersion", VER_FILE_VERSION_STR "\0"
                VALUE "InternalName", "Internal Name"
                VALUE "LegalCopyright", "CopyRight stuff - Copyright (C) 2015"
                VALUE "OriginalFilename", "yourapp.exe"
                VALUE "ProductName", "Your Application"
                VALUE "ProductVersion", VER_PRODUCT_VERSION_STR "\0"
            END
        END
        BLOCK "VarFileInfo"
        BEGIN
            VALUE "Translation", 0x407, 1200
        END
    END
    
  • 接下来将 version.h 文件添加到您的项目中,该文件定义了所有内容,设置如下:

    #include "svn_version.h"
    
    #define STRINGIZE2(s) #s
    #define STRINGIZE(s) STRINGIZE2(s)
    
    #define VERSION_MAJOR             1
    #define VERSION_MINOR             0
    #define VERSION_REVISION          SVN_REVISION
    #define VERSION_BUILD               0
    
    #if SVN_LOCAL_MODIFICATIONS
       #define VERSION_MODIFIER "M"
    #else
       #define VERSION_MODIFIER
    #endif
    
    #define VER_FILE_VERSION   VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD
    #define VER_FILE_VERSION_STR        STRINGIZE(VERSION_MAJOR)        \
    "." STRINGIZE(VERSION_MINOR)    \
    "." STRINGIZE(VERSION_REVISION) \
    "." STRINGIZE(VERSION_BUILD)    \
    
    #define VER_PRODUCT_VERSION         VER_FILE_VERSION
    #define VER_PRODUCT_VERSION_STR     VER_FILE_VERSION_STR
    

此后您可以点击上面的链接


0
投票

我不确定 VS2008 是否具有该功能,但我认为您可以通过一个链接器后事件来完成此操作,该事件运行一个小脚本来为您完成任务。


0
投票

我使用预构建脚本(用 JavaScript 编写并使用 cscript.exe 引擎执行)定义主要/次要版本,获取 SVN 修订号并根据当前日期生成一个神奇的构建号。 然后,该脚本创建一个 version.h 文件,供主应用程序使用(并由主应用程序资源文件创建 VERSION 资源)。


© www.soinside.com 2019 - 2024. All rights reserved.