添加构建日期和自动递增构建号






4.12/5 (14投票s)
2005 年 5 月 24 日
3分钟阅读

90367

2153
本文介绍如何向项目中添加自动化功能,以递增构建编号并添加可在文件属性窗口的“版本”选项卡中看到的构建日期。
引言
这里发布了很多文章和应用程序,但我找不到能满足我需求的。我不想向 Visual Studio 添加任何插件,也不想修改 IDE 应该维护和修改的任何.rc文件。我想添加更多版本信息,例如构建日期。这里提供的一些解决方案很好,但并不完整。它们只是我的解决方案的起点。
解决方案
目标是在项目的.rc文件中添加动态版本号和构建日期字符串。 从项目的 .rc 文件支持#include
指令开始,我进行了以下操作
- 定义了一些常量
#define VERSION_MAJOR 4 #define VERSION_MINOR 5 #define VERSION_BUILD 46 #define VERSION_QFE 11 #define VERSION_BUILD_DATE "24/05/2005" #define VERSION_BUILD_TIME "08:37:55UTC" #define _STR(x) #x #define STR(x) _STR(x) #define VERSION_NUMBER VERSION_MAJOR,VERSION_MINOR, VERSION_BUILD,VERSION_QFE #define VERSION_STRING STR(VERSION_MAJOR) "." STR(VERSION_MINOR) "." \ STR(VERSION_BUILD) "." STR(VERSION_QFE) #define VERSION_COMPANY "" #define VERSION_COPYRIGHT "(C) Gugulea 2005" #define VERSION_TRADEMARK "" #define VERSION_BUILD_DATE_TIME VERSION_BUILD_DATE " - " \ VERSION_BUILD_TIME
文件的版本如下所示:4.5.46.11。 这些数字代表产品的主版本号、次版本号、构建版本号和 qfe 版本号。 我选择修改构建版本号,尽管我的解决方案可以轻松支持修改任何数字,甚至添加更多。
- 将所有这些
#define
放入version.h文件中,我将其包含在.rc文件中#ifndef _MAC ///////////////////////// // // Version // #include "version.h" ......................... #endif // !_MAC
因为只有其中一些数字/字符串被修改,所以我将它们分离到version.ver中
#define VERSION_MAJOR 4 #define VERSION_MINOR 5 #define VERSION_BUILD 46 #define VERSION_QFE 11 #define VERSION_BUILD_DATE "24/05/2005" #define VERSION_BUILD_TIME "08:37:55UTC"
和version.h
#include "version.ver" #define _STR(x) #x #define STR(x) _STR(x) #define VERSION_NUMBER VERSION_MAJOR,VERSION_MINOR, VERSION_BUILD,VERSION_QFE #define VERSION_STRING STR(VERSION_MAJOR) "." STR(VERSION_MINOR) "." \ STR(VERSION_BUILD) "." STR(VERSION_QFE) #define VERSION_COMPANY "" #define VERSION_COPYRIGHT "(C) Gugulea 2005" #define VERSION_TRADEMARK "" #define VERSION_BUILD_DATE_TIME VERSION_BUILD_DATE " - " \ VERSION_BUILD_TIME
version.h 包括 version.ver 并且被 .rc 文件包含,因此我没有直接将版本号添加到 .rc 文件中,而是将它们分离到更多文件中。 唯一会被修改的文件是 version.ver 文件,它非常简单易于维护和修改,并且它将是唯一一个在每次构建时自动修改的文件。
.rc 文件将如下所示
#ifndef _MAC ////////////////////////////////////////// // // Version // #include "version.h" VS_VERSION_INFO VERSIONINFO FILEVERSION VERSION_NUMBER PRODUCTVERSION VERSION_NUMBER ... VALUE "Build Date", VERSION_BUILD_DATE_TIME "\0" VALUE "CompanyName", VERSION_COMPANY "\0" VALUE "FileVersion", VERSION_STRING "\0" VALUE "LegalCopyright", VERSION_COPYRIGHT "\0" VALUE "LegalTrademarks", VERSION_TRADEMARK "\0" VALUE "ProductVersion", VERSION_STRING "\0" ... #endif // !_MAC
“构建日期”字符串是手动添加的,它将出现在模块、DLL 或 EXE 的版本选项卡中。
现在 Visual C++ 和 .rc 文件还有另一个问题。 如果您修改了一些资源或向应用程序添加了新资源,它将覆盖版本字符串。 因此,您可以将之前的所有部分放在一个 .rc2 文件中,您可以在 .rc 文件中包含该文件。
就这样,您包含在资源文件中的两个文件是:version.h 和 version.ver。 后者将由外部应用程序修改,而资源文件不会被触及。 makeversion.exe 文件会将
VERSION_BUILD_DATE
和VERSION_BUILD_TIME
值更新为当前值,并将递增VERSION_BUILD
编号。 您可以修改它以更新 version.ver 中的任何数字,例如VERSION_MINOR
。 - 在构建时运行 makeversion 工具。 对于 VC6,您必须将其添加到项目的“预链接步骤”条目中。
For Release: makeversion.exe /inc version.ver rc.exe /l 0x409 /fo"Release/cdcdcd.res" /d "NDEBUG" "C:\cdcdcd.rc" For Debug: makeversion.exe version.ver rc.exe /l 0x409 /fo"Debug/cdcdcd.res" /d "_DEBUG" "C:\cdcdcd.rc"
rc
命令可以在项目的构建日志中找到。
/inc 选项将递增构建编号,并且只应添加到产品的发布版本中。 makeversion.c 是用 C 编写的; version.ver 文件包含标准的 #define
指令,并且不支持任何注释; 空行也被忽略; 命令行中的 /h 或 /? 选项会显示更多参数。 如果 version.ver 文件不存在,它将被自动创建。 如果它为空,它将被填充为默认版本 1.0.0.0 和当前时间和日期。