【转】一个比较实用的VS C++版本号自增的实现方式
2015-10-29 10:46
423 查看
以前也实现过一次版本号自增,是用Python自动修改rc文件实现的,现在感觉颇多缺陷所以研究了下别人的做法后自己又重新实现了一遍。
文件内容如下
[/code]这样定义头文件可以比较完善的满足程序需求,当程序中需要取得版本号时,可以使用STR_VER_FULL宏而在RC中,则使用VER_FULL_RC和STR_VER_FULL_RC
在rc文件中inlucde我们之间定义的Version.h文件然后使用VER_FULL_RC和STR_VER_FULL_RC替换,如下
[/code]
Python脚本如下
[/code]
在我现在的项目中,Python脚本被放在Tools目录下,所以我的调用命令是这样的
转自 http://www.coofly.com/index.php/archives/22/
1.定义Version.h头文件
文件内容如下#pragma once
#define _VERTOSTRING(arg) #arg
#define VERTOSTRING(arg) _VERTOSTRING(arg)
#define VER_MAIN 1
#define VER_SUB 0
#define VER_SUB2 0
#define VER_BUILD 0
#define VER_FULL VER_MAIN.VER_SUB.VER_SUB2.VER_BUILD
#define VER_FULL_RC VER_MAIN,VER_SUB,VER_SUB2,VER_BUILD
#define STR_VER_FULL _T(VERTOSTRING(VER_FULL))
#define STR_VER_FULL_RC VERTOSTRING(VER_FULL_RC)
[/code]这样定义头文件可以比较完善的满足程序需求,当程序中需要取得版本号时,可以使用STR_VER_FULL宏而在RC中,则使用VER_FULL_RC和STR_VER_FULL_RC
2.修改RC文件
在rc文件中inlucde我们之间定义的Version.h文件然后使用VER_FULL_RC和STR_VER_FULL_RC替换,如下/////////////////////////////////////////////////////////////////////////////
//
// Version
//
#include "Version.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FULL_RC
PRODUCTVERSION VER_FULL_RC
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080404b0"
BEGIN
VALUE "FileDescription", "KooMC"
VALUE "FileVersion", STR_VER_FULL_RC
VALUE "InternalName", "KooMC"
VALUE "LegalCopyright", "Copyright (C) 2011"
VALUE "OriginalFilename", "KooMC.exe"
VALUE "ProductName", "KooMC"
VALUE "ProductVersion", STR_VER_FULL_RC
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804, 1200
END
END
[/code]
3.编写Python脚本来修改VER_BUILD
Python脚本如下# coding=gbk
__author__ = 'coofly'
import argparse
import re
import sys
version_header_template = \
"""#pragma once
#define _VERTOSTRING(arg) #arg
#define VERTOSTRING(arg) _VERTOSTRING(arg)
#define VER_MAIN %d
#define VER_SUB %d
#define VER_SUB2 %d
#define VER_BUILD %d
#define VER_FULL VER_MAIN.VER_SUB.VER_SUB2.VER_BUILD
#define VER_FULL_RC VER_MAIN,VER_SUB,VER_SUB2,VER_BUILD
#define STR_VER_FULL _T(VERTOSTRING(VER_FULL))
#define STR_VER_FULL_RC VERTOSTRING(VER_FULL_RC)
"""
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('header_path', help='头文件路径')
args = parser.parse_args()
print args.header_path
f = open(args.header_path)
try:
original = f.read()
ver_main = int(re.search(r'^#define\s+VER_MAIN\s+(\d+)$', original, re.M).group(1))
ver_sub = int(re.search(r'^#define\s+VER_SUB\s+(\d+)$', original, re.M).group(1))
ver_sub2 = int(re.search(r'^#define\s+VER_SUB2\s+(\d+)$', original, re.M).group(1))
ver_build = int(re.search(r'^#define\s+VER_BUILD\s+(\d+)$', original, re.M).group(1))
except re.error:
print '解析头文件失败……'
sys.exit(0)
finally:
f.close()
print '原版本号:%d.%d.%d.%d' % (ver_main, ver_sub, ver_sub2, ver_build)
ver_build += 1
print '新版本号:%d.%d.%d.%d' % (ver_main, ver_sub, ver_sub2, ver_build)
new_header = version_header_template % (ver_main, ver_sub, ver_sub2, ver_build)
with open(args.header_path, 'w') as f:
f.write(new_header)
[/code]
4.在预先生成事件中添加Python脚本的调用
在我现在的项目中,Python脚本被放在Tools目录下,所以我的调用命令是这样的python "$(SolutionDir)\Tools\update_version.py" "$(ProjectDir)\Version.h"
转自 http://www.coofly.com/index.php/archives/22/
相关文章推荐
- activemq-cpp 例子编译
- [转]一个比较实用的VS C++版本号自增的实现方式
- C++常见几种输出方法评测(int && long long)
- C++11:lambda表达式
- 1032. 挖掘机技术哪家强(20)
- 首个 C++ 编译器诞生 30 周年了,来听听 C++ 之父畅谈 C++
- VSC++代码智能提示——Visual Assist X
- C++中运算符的优先级(供查阅)
- MPLAB X IDE使用心得
- Effective C++ 总结
- C++11学习笔记5---智能指针
- C语言学习笔记一
- C++、C#、java算法学习日记01---冒泡排序(BubbleSort)
- C++中的volatile修饰符的作用
- c++文件读写
- 1037. 在霍格沃茨找零钱(20)
- exuberant ctags、ctags、ptags等标签工具介绍
- 消除C++中警告代码
- 在C语言中函数中使用枚举类型和结构
- c语言编程的乘法口诀表