VC使用编译时间作为版本号标识的方法

常用方法分两步:

1. 得到编译时间;

2. 设置基准时间,以编译时间距基准时间的总天数的2倍作为版本号,适当情况还可加上初值;

其中第一步实现有两种方法:

1. 直接使用系统宏:CString OcxTime = __DATE__;
2. 在编译选项的Pre-link Step中调用批处理文件.bat:

@echo off
echo #pragma once>"Ver.h"
echo #define APP_VER_NUM  "%data%">>"Ver.h"

其它网友的补充

使用宏__DATE__和__TIME__

CString strVersion,strBuildTime;
strBuildTime = __DATE__;
strBuildTime.Append(" ");
strBuildTime.Append(__TIME__);
COleVariant vtime(strBuildTime);
vtime.ChangeType(VT_DATE);
COleDateTime dateTime=vtime;
SYSTEMTIME systime;
VariantTimeToSystemTime(dateTime, &systime);
CTime buildTime(systime);
strVersion = buildTime.Format(" Builded %Y-%m-%d %H:%M:%S "); 

it一梦同学的补充

一般来说,发布的正式软件都会包含程序的svn版本号以及软件的编译版本和编译时间等信息,但是这些东西并不是默认就存在的,需要我们进行一些步骤的处理。具体做法有几种,万变不离其宗的是,利用SVN自带的指令获取到版本号以及当前时间,填充模板当中的占位符,最后用替换后的模板覆盖资源文件即可。这里只讲最简单的一种:
a. 首先需要给VC程序添加资源文件,假设程序名为Test,则资源文件为Test.rc
b. 向资源文件中添加新的资源项——version,资源文件用记事本打开,增加了如下代码:

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "080404b0"
    BEGIN
      VALUE "FileDescription", "Test"
      VALUE "FileVersion", "1, 1, 1, 0"
      VALUE "InternalName", "Test"
      VALUE "LegalCopyright", "Copyright (C) 2015"
      VALUE "OriginalFilename", "Test.exe"
      VALUE "ProductName", "Microsoft"
      VALUE "ProductVersion", "V1.0"
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x804, 1200
  END
END

c. 接下来创建一个模板,利用SVN提供的占位符WCREV获取版本号,WCNOW获取编译时间。模板可以直接复制Test.rc文件,更名为Test.rc2。修改上述代码中的ProductVersion的值即可:

VALUE "ProductVersion", "V2.1.1.$WCREV$.(Build$WCNOW$)"

d. 那么何时进行占位符的替换,随后替换程序的资源文件Test.rc,准确的将版本号与编译时间编译进程序呢?VS提供了一个Build Events配置,我们选择Pre-Build Event,增加一行代码如下:

SubWCRev $(ProjectDir) $(ProjectDir)\Test.rc2 $(ProjectDir)\Test.rc

代码的意思是在程序编译之前,用SVN的脚本工具SubWCRev获取到工程目录的SVN号以及当前的编译时间,替换rc2文件中的占位符,覆盖到rc文件中。

(0)

相关推荐

  • VC使用编译时间作为版本号标识的方法

    常用方法分两步: 1. 得到编译时间: 2. 设置基准时间,以编译时间距基准时间的总天数的2倍作为版本号,适当情况还可加上初值: 其中第一步实现有两种方法: 1. 直接使用系统宏:CString OcxTime = __DATE__; 2. 在编译选项的Pre-link Step中调用批处理文件.bat: @echo off echo #pragma once>"Ver.h" echo #define APP_VER_NUM "%data%">>&

  • linux 程序、动态库、静态库内部添加版本号和编译时间详解

    给程序和库添加版本号和库,有利于维护和升级. 当然你可以在文件名上体现,比如有个程序叫 yun,文件名写为 yun_1.0.2,但这个需要每次手动维护,而且不能100%确保当前程序就是那个版本.所以,把版本号体现在程序内部,是一个不错的选择. ----------------------------- 我是做法分割线 ------------------------------- 一.可执行程序 程序内部定义版本宏,然后 main 函数通过 -v 参数,打印版本号和编译时间,代码如下: 注:__

  • 减少C++代码编译时间的简单方法(必看篇)

    c++ 的代码包含头文件和实现文件两部分, 头文件一般是提供给别人(也叫客户)使用的, 但是一旦头文件发生改变,不管多小的变化,所有引用他的文件就必须重新编译,编译就要花时间,假如你做的工程比较大(比如二次封装chrome这类的开发),重新编译一次的时间就会浪费上班的大部分时间,这样干了一天挺累的, 但是你的老板说你没有产出,结果你被fired, 是不是很怨啊, 如果你早点看到这段文章,你就会比你的同事开发效率高那么一些,那样被fired就不会是你了,你说这篇文章是不是价值千金!开个玩笑 :)

  • Nodejs 获取时间加手机标识的32位标识实现代码

    具体代码如下所示: var crypto = require("crypto"); function randomlogn(num){ var n = num.split(''); var m = []; for(var i=0;i<16;i++){ m[i] = n[Math.floor(Math.random()*17)]; } return u = m.join(""); } //随机数 function md5(text) { return crypt

  • Go项目中添加生成时间与版本信息的方法

    目录 一.获取生成时间 1.使用Go编译时的链接参数来指定生成时间 2.使用C语言获取生成时间 二.获取Git版本信息 三.获取Go的相关信息 我们在编写软件时,一般会有版本号以及生成的时间,Go编译的程序中,如何添加当时的编译时间以及版本信息? C/C++语言,非常方便,可以直接使用__DATE__宏即可知道生成时间,但是Go语言没有.既然Go语言没有, C语言有,那我们可以直接使用CGO来使用C语言的功能.当然也可以使用Go的编译链接参数来指定,只是这种方式不适用于Windows. 一.获取

  • Centos下编译Linux内核的具体实现方法

    Linux内核编译是一件简单却费事的事.但是独立的编译linux内核会帮助你很好的理解Linux内核的工作机理. 首先编译linux内核我们需要在当前linux操作系统下安装gcc编译器,因为我是Centos distribution版本 yum install gcc 接下来安装依赖环境: yum install ncurses-devel 现在我们以linux-3.18.1内核为例进行编译,假设我当前系统的版本为2.6.32 那么我首先在Linux内核发布的官网上http:/kernel.o

  • VC外部符号错误_main,_WinMain@16,__beginthreadex解决方法

    本文实例讲述了VC外部符号错误_main,_WinMain@16,__beginthreadex解决方法.分享给大家供大家参考.具体如下: 在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数,就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有: libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main LIBCD.lib(wincrt0.obj

  • CentOS7.3编译安装Python3.6.2的方法

    我使用的是 CentOS7.3 安装 Python3.6.2 1.查看是否已经安装Python Centos7 默认安装了Python2.7.5 因为一些命令要用它比如 yum 它使用的是 python2.7.5. 使用 python -V 命令查看一下是否安装 Python: # python -V Python 2.7.5 然后查看一下 Python 可执行文件的位置: # which python /usr/bin/python 进入到 bin 目录: # cd /usr/bin/ # l

  • Centos 6中编译配置httpd2.4的多种方法详解

    前言 我们使用linux的过程中,一定会用到httpd这个服务,在centos7上,默认安装的httpd就是2.4版本,大家都知道,2.4版本相对之前的版本已经做了改进,用起来更加方便,但是我们的centos6上,默认安装的版本是2.2,那么,如果我们想要在centos6上安装httpd2.4版本的话,我们要如何做呢? 本文中,小编会给大家介绍两种方法,来实现在centos6上编译安装httpd2.4版本. 方法一 分别编译法 1.下载源码并解压缩 我们可以使用yum info httpd和yu

  • JavaScript获取当前时间向前推三个月的方法示例

    本文实例讲述了JavaScript获取当前时间向前推三个月的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"&g

随机推荐