Visual studio每次build自动增加版本号
关键词:visual studio,rc file,VS_VERSION_INFO,FILEVERSION,PRODUCTVERSION
目标:希望每次在vs中编译项目时,生成的可执行程序版本号自动+1
环境:vs2010,python 2.7.8
步骤:
1.在rc文件同目录下添加version.h头文件,内容如下:
#define RELEASE_VER 1 // 0: beta version; 1: release version
#define RELEASE_DATE "Sep 01 2014" // Mmm dd yyyy; only used for RELEASE_VER=1 #define RELEASE_VER_MAIN 1 // version number (binary)
#define RELEASE_VER_MAIN2 0
#define RELEASE_VER_SUB 0
#define RELEASE_VER_SUB2 0 // version number (string)
#define TOSTRING2(arg) #arg
#define TOSTRING(arg) TOSTRING2(arg)
#define RELEASE_VER_STR TOSTRING(RELEASE_VER_MAIN) "." TOSTRING(RELEASE_VER_MAIN2) "." TOSTRING(RELEASE_VER_SUB) "." TOSTRING(RELEASE_VER_SUB2)
2.用文本编辑器(notepad++)打开rc文件,修改文件内容
// Microsoft Visual C++ generated resource script.
//
#include "resource.h" #define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h" /////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS /////////////////////////////////////////////////////////////////////////////
// Chinese (Simplified, PRC) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED #ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
// TEXTINCLUDE
BEGIN
"resource.h\0"
END TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END #endif // APSTUDIO_INVOKED /////////////////////////////////////////////////////////////////////////////
//
// Version
// VS_VERSION_INFO VERSIONINFO
FILEVERSION ,,,
PRODUCTVERSION ,,,
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080404b0"
BEGIN
VALUE "CompanyName", "TODO: <Company name>"
VALUE "FileDescription", "TODO: <File description>"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "VersionT.exe"
VALUE "LegalCopyright", "Copyright (C) 2014"
VALUE "OriginalFilename", "VersionT.exe"
VALUE "ProductName", "VersionTest"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804,
END
END #endif // Chinese (Simplified, PRC) resources
///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
// /////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
修改前的rc文件内容
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#include "version.h" #define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h" /////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS /////////////////////////////////////////////////////////////////////////////
// Chinese (Simplified, PRC) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED #ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
// TEXTINCLUDE
BEGIN
"resource.h\0"
END TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END #endif // APSTUDIO_INVOKED /////////////////////////////////////////////////////////////////////////////
//
// Version
// VS_VERSION_INFO VERSIONINFO
FILEVERSION RELEASE_VER_MAIN,RELEASE_VER_MAIN2,RELEASE_VER_SUB,RELEASE_VER_SUB2
PRODUCTVERSION RELEASE_VER_MAIN,RELEASE_VER_MAIN2,RELEASE_VER_SUB,RELEASE_VER_SUB2
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080404b0"
BEGIN
VALUE "CompanyName", "TODO: <Company name>"
VALUE "FileDescription", "TODO: <File description>"
VALUE "FileVersion", RELEASE_VER_STR
VALUE "InternalName", "VersionT.exe"
VALUE "LegalCopyright", "Copyright (C) 2014"
VALUE "OriginalFilename", "VersionT.exe"
VALUE "ProductName", "VersionTest"
VALUE "ProductVersion", RELEASE_VER_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804,
END
END #endif // Chinese (Simplified, PRC) resources
///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
// /////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
修改后的rc文件内容
3.把addVersionNum.py文件放到version.h同目录下(不一定要同目录,也可以用相对路径)
在项目property->Build Events->Pre-Build Event的CommandLine中添加如下语句:
python.exe $(ProjectDir)addVersionNum.py
python脚本内容如下(PS:很低级的python写法,但是能work 说不定熟悉python正则的高手一行代码就能搞定)
#author: jakubfong
#version: 1.0 -- import sys
import string
import re f = open(r'version.h', 'r+')
lines = f.readlines()
data = []
for line in lines:
tmp = re.split('\s+', line)
if len(tmp) > and tmp[] == 'RELEASE_VER_SUB2':
tmp[] = str(int(tmp[])+);
strtmp = ' '.join(tmp)
strtmp += '\n'
data.append(strtmp)
print "###"+strtmp
else:
data.append(line)
f.seek()
f.writelines(data)
f.close()
work done
参考链接:http://stackoverflow.com/questions/16626329/how-can-i-modify-vs-version-info-from-the-cpp-file?newreg=fee2fc67f78c4cd6a8b0e66688691b58
Visual studio每次build自动增加版本号的更多相关文章
- 禁止Visual Studio启动时自动连接TFS服务器
在默认设置情况下,Visual Studio启动时,会自动连接上次打开过的TFS服务器.这种设计能够提高开发人员的工作效率,避免每次手动连接TFS服务器. 但是在某些情景中,也会给人造成不必要的麻烦, ...
- Visual Studio 中 Build 和 Rebuild 的区别
因为之前写的程序比较小,编译起来比较快,所以一直都没有太在意 Build 和 Rebuild 之间的区别,后来发现两个还是有很大不同. Build 只针对在上次编译之后更改过的文件进行编译,在项目比较 ...
- Visual Studio工具——为编辑器增加垂直辅助线
原文:<Visual Studio工具> Posted on 2014/03/13 ==================================================== ...
- Android Studio生成APK自动追加版本号、自定义apk名称、指定签名证书文件
你也可以查看我的其他同类文章,也会让你有一定的收货! 生成APK自动追加版本号 可自动区分debug和release,并追加版本号: 打开 build.gradle 在 android 节点中插入下面 ...
- Windows下用Visual Studio来build ImageMagick
参考: http://www.imagemagick.org/script/install-source.php#windows http://blog.163.com/anteaus_20/blog ...
- Visual Studio 中 Build、Rebuild 、 Clean 之间的区别是什么?
今天翻看c-sharpcorner技术网站看到了这样一篇小记,标题为:What Is The Difference Between Build, Rebuild And Clean In Visual ...
- Visual Studio新建类自动添加注释
修改 VS中新建类的模板 如以下地址:D:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSha ...
- visual studio 2017--括号自动补全
---恢复内容开始--- 平常在visual studio中编写C++代码,一般括号之类的都是自动补全的,最近想用来编写Python,发现括号不能补全了,很不适应. Python编写时好像括号好像默认 ...
- visual studio 配置属性中增加自定义宏和宏值
visual studio中有一些预先定义的宏,用于配置项目属性,如SolutionDir.我们也可以自定义类似的宏,从而在配置包含目录(include)或添加依赖项时简化配置项. 如何创建自己的宏呢 ...
随机推荐
- Java 绘制环形的文字 (Circle Text Demo)
1. [代码]CircleTextDemo.java import java.awt.*;import java.awt.event.*;import java.awt.geom.*; /** ...
- java中wait和notify
在JAVA中,是没有类似于PV操作.进程互斥等相关的方法的.JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的 ...
- I.MX6 U-boot imxotp MAC address 写入
/***************************************************************************** * I.MX6 U-boot imxotp ...
- [Selenium] IOS 之 ios-driver
从 Selenium 的官方文档来看,推荐用户使用 ios-driver 或 appium 而不是官方发布的 iPone Driver. 他们的地址分别是: http://ios-driver.git ...
- 「网络流24题」「Codevs1237」 餐巾计划问题
1237 餐巾计划问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相 ...
- javacv开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
- poj1830开关问题——异或高斯消元
题目:http://poj.org/problem?id=1830 根据题意,构造出n元方程组: a(1,1)x1 ^ a(1,2)x2 ^ a(1,3)x3 ... a(1,n)xn = st1 ^ ...
- python自动化运维-编写rsync+sersync安装脚本实现文件实时同步
rsync+sersync组合可以实时监听目录的变化,实现实时同步数据. 具体安装教程可查看:http://www.osyunwei.com/archives/7447.html. 安装着实有些复杂, ...
- 单片机知识是Linux驱动开发的基础之一
这是arm裸机1期加强版第1课第2节课程的wiki文字版. 为什么没前途也要学习单片机? 因为它是个很好的入口. 学习单片机可以让我们抛开复杂的软件结构,先掌握硬件操作,如:看原理图.芯片手册.写程序 ...
- UVa 11040 Add bricks in the wall (水题递推)
题意:给定一个金字塔,除了最后一行,每个数都等于支撑它的两个数的和,现在给奇数行的左数奇数位置,求整个金字塔. 析:很容易看出来,从下往上奇数行等于 a[i][j] = (a[i-2][j-1] - ...