VC编译时版本号自动生成

原创 2007年10月10日 10:19:00

 1.新建一个宏,内容如下:

'------------------------------------------------------------------------------
'FILE DESCRIPTION: version
'------------------------------------------------------------------------------
Function GetProjectDir(FullName)

'VC++ doesn't provide any method for getting the path of the active project
'See the VB Script reference for more information on the VB Script functions
'used in this function

Dim proj_path
proj_path = Split(StrReverse(FullName),"/",-1,1)

Dim count
count = UBound(proj_path)

Dim full_path
full_path = ""
Dim i

for i = 1 to count
 full_path = full_path & "/" & proj_path(i)
next

GetProjectDir = StrReverse(full_path)

End Function


Sub ReplaceText(selection, count, incrementby)

'selection represents the TextSelection object
'count represents the position of the version number to be incremented
'incrementby represents a number that will be added to the existing version number

selection.WordRight dsMove, count
selection.WordRight dsExtend, 1
Dim str
str = selection.Text
str = str + incrementby

selection.Text = str

End Sub


Sub Application_BuildFinish(numError, numWarning)

'This event will be triggered after every build of a project
'You can check numError and/or numWarning to determine if you want to continue
'If numError <> 0 Then
    'exit sub
'Obtain the full path of the active project
Dim full_path
full_path = GetProjectDir(ActiveProject.FullName)

full_path = full_path & "versionno.h"

'Open the VersionNo.h file
Documents.Open full_path

'Obtain the TextSelection object
Dim selection
set selection = ActiveDocument.Selection
selection.StartOfDocument

'Increment the version information
ReplaceText selection, 9, 1
selection.LineDown
selection.StartOfLine
ReplaceText selection, 9, 1
selection.LineDown
selection.StartOfLine
ReplaceText selection, 10, 1
selection.LineDown
selection.StartOfLine
ReplaceText selection, 10, 1

ActiveDocument.Save
ActiveDocument.Close
 
End Sub
2.保存后,在VC IDE界面的TOOLS菜单下点击customize,进入customize对话框,在add-ins and Macro Files页面下选择浏览按钮,找到上面保存的宏文件,确认是选中状态后,关闭customize对话框

3.下面就是修改你所要让版本号自动修改的工程了,修改工程中*.rc文件,把文件中的

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "Comments", "Sample Application/0"
            VALUE "CompanyName", "Microsoft Corp./0"
            VALUE "FileDescription", "MyProject MFC Application/0"
            VALUE "FileVersion", "1, 0, 0, 1/0"
            VALUE "InternalName", "MyProject/0"
            VALUE "LegalCopyright", "Copyright (C) 1999/0"
            VALUE "OriginalFilename", "MyProject.EXE/0"
            VALUE "ProductName", "MyProject Application/0"
            VALUE "ProductVersion", "1, 0, 0, 1/0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

剪切到*.rc2文件的// Add manually edited resources here...下,并进行修改如下:

#include "VersionNo.h"
VS_VERSION_INFO VERSIONINFO
 FILEVERSION FILEVER
 PRODUCTVERSION PRODUCTVER
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "080404b0"
        BEGIN
            VALUE "Comments", "/0"
            VALUE "CompanyName", "/0"
            VALUE "FileDescription", "22 Microsoft 基础类应用程序/0"
            VALUE "FileVersion", STRFILEVER
            VALUE "InternalName", "22/0"
            VALUE "LegalCopyright", "版权所有 (C) 2007/0"
            VALUE "LegalTrademarks", "/0"
            VALUE "OriginalFilename", "22.EXE/0"
            VALUE "PrivateBuild", "/0"
            VALUE "ProductName", "22 应用程序/0"
            VALUE "ProductVersion", STRPRODUCTVER
            VALUE "SpecialBuild", "/0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x804, 1200
    END
END

4.在当前工程中增加头文件VersionNo.h内容如下:

#define FILEVER        1,0,0,14
#define PRODUCTVER     1,0,0,14
#define STRFILEVER     "1,0,0,14/0"
#define STRPRODUCTVER  "1,0,0,14/0"

注意:VersionNo.h的最后一行一定要加回车

给VC程序添加版本号与编译时间

一般来说,发布的正式软件都会包含程序的svn版本号以及软件的编译版本和编译时间等信息,但是这些东西并不是默认就存在的,需要我们进行一些步骤的处理。具体做法有几种,万变不离其宗的是,利用SVN自带的指令...
  • cuglifangzheng
  • cuglifangzheng
  • 2016年02月23日 14:59
  • 1377

C++使用 Git 生成编译版本号

一般而言,我们的软件版本号通常会包括一个编译版本号。如果你的代码使用版本控制系统进行管理(很多开发者都是这么做的),这个编译版本号可以是我们版本控制系统的提交版本。 如果我们使用 Git 进行管理,...
  • QHH_QHH
  • QHH_QHH
  • 2016年09月26日 14:56
  • 653

利用SVN实现自动版本号生成

以 vc6 为例, 文件的版本信息保存在 rc 文件. 编译成 res 文件, 然后和其他 obj 一起 link. 现在的思路就是. 编辑 rc 文件, 将版本号比如 2.2.4.0 改成 2.2....
  • wzsy
  • wzsy
  • 2015年05月07日 17:15
  • 2763

VS编译时自动生成版本

原理 SVN中的可执行文件SubWCRev.exe,该文件可以查看工作目录的当前svn号并且保存在变量WCREVWCREV中。因此,可以先写一个批处理,然后在项目的预生成命令中执行该批处理文件。VS...
  • zx3517288
  • zx3517288
  • 2016年01月05日 19:45
  • 2000

获取程序编译时间, 用于自动生成版本号

我们写软件的,总希望程序有变动时可以自动生成版本号,不用手动去改,这样多方便啊。VS编译器就可实现这个功能。如下所示: /* 获取程序编译时间, 用于自动生成版本号很好 ...
  • haart
  • haart
  • 2016年06月14日 10:21
  • 2321

VC获得程序自身的版本号

操作系统: Windows7/Windows10 64位 运行环境: Visual Studio 10 文件编码: Unicode char* GetLocalPogramVersion() {...
  • dezhihuang
  • dezhihuang
  • 2015年11月04日 15:06
  • 729

VC自动生成软件版本号

VC自动生成软件版本号   flyfish 目的: 软件的版本有主版本号.子版本号.修正版本号.编译版本号 其中编译版本号与SVN服务器的版本号(Revision)自动同步。     ...
  • flyfish1986
  • flyfish1986
  • 2015年01月07日 15:29
  • 6703

自动更新SVN版本号

VC2005利用SVN的版本号,生成DLL和EXE文件的版本号 TortoiseSVN下有一个SubWCRev程序,可以获取任意个路径对应的SVN版本库的版本号。并替换到文件对应位置。 VC2005的...
  • u014421422
  • u014421422
  • 2015年01月24日 15:22
  • 1450

VC++中debug跟release编译模式的区别总结

Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当...
  • business122
  • business122
  • 2016年07月07日 17:27
  • 987

VC编译时的一些问题

VC编译选项多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd)C 运行时库 库文件Sing...
  • renduy
  • renduy
  • 2017年04月11日 18:32
  • 126
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC编译时版本号自动生成
举报原因:
原因补充:

(最多只允许输入30个字)