c ++按时间自动增量构建版本&日期

时间:2013-04-18 19:00:59

标签: c++ visual-c++

我正在尝试按时间创建自动增量构建版本&日期

我无法添加日期&时间#define

version.h文件

#define STRINGIZE2(s) #s
#define STRINGIZE(s) STRINGIZE2(s)


#define VERSION_MAJOR     5
#define VERSION_MINOR     0
#define VERSION_REVISION  2
#define VERSION_BUILD     1

#define PRODUCTVER         VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD
#define STRFILEVER        STRINGIZE(VERSION_MAJOR)  "." STRINGIZE(VERSION_MINOR) "." STRINGIZE(VERSION_REVISION) "." STRINGIZE(VERSION_BUILD) 

.rc文件

VS_VERSION_INFO VERSIONINFO
 FILEVERSION PRODUCTVER
 PRODUCTVERSION PRODUCTVER

            VALUE "FileVersion", STRFILEVER
            VALUE "ProductVersion", STRFILEVER

我试过

#define VERSION_MAJOR     __DATE__
#define VERSION_MINOR      __TIME__
#define VERSION_REVISION  2
#define VERSION_BUILD     1

我还尝试了其他方式,如

time_t now;
struct tm *current;
now = time(0);
current = localtime(&now);
    #define VERSION_MAJOR    current->tm_wday
    #define VERSION_MINOR      current->tm_hour
    #define VERSION_REVISION  2
#define VERSION_BUILD     1 

没有成功

我只想在定义

中添加日期和小时

我希望有一个解决方案

谢谢

1 个答案:

答案 0 :(得分:1)

鉴于下面的示例,我们有一个构建脚本修改版本文本中的值。

static const char   version_text[] = "519";
char const *
Version_Get_Text(void)
{
    return version_text;
}

unsigned int
Version_Text_Length(void)
{
    return sizeof(version_text) - 1U;
}

不需要凌乱的#define宏。这些函数还保留了运行时和类型安全性:当版本发生变化时,不需要重建访问这些函数的文件;只有这个模块。

这项技术与我们的自动构建服务器相结合,到目前为止已经持续了一年,没有任何问题。

此外,无需进行优化。访问该版本不是我们产品的核心操作的一部分;它只发生在初始化时,首次显示调试提示或用户发送询问版本的命令时。在这些情况下,执行时间并不重要。