【问题标题】:How to Increment Visual Studio build number using C++?如何使用 C++ 增加 Visual Studio 内部版本号?
【发布时间】:2009-03-12 10:39:02
【问题描述】:

我有一个 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 compiler-construction build-automation


    【解决方案1】:

    Versioning Controlled Build 插件似乎可以完成这项工作。

    更新:您的问题特别提到了使用 Visual Studio 来增加版本,但没有什么自动化的。您是否考虑过使用 Nant 和 CI 服务器?这样,很容易将 SVN 修订号注入到与 C++ 等效的 AssemblyInfo.cs 中。自动,在构建服务器上。

    【讨论】:

      【解决方案2】:

      如果您使用 svn 对项目进行版本控制,您可以按照this link 中的说明进行操作,因为我可以使用版本信息和比较源代码来跟踪发布应用程序中的错误。

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

      • 像这样设置你的 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
        

      之后你可以关注上面的link

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 听起来不错。介意张贴吗?
          【解决方案5】:

          【讨论】:

            猜你喜欢
            • 2015-02-17
            • 2010-09-17
            • 1970-01-01
            • 2021-03-01
            • 2011-08-21
            • 2011-03-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多