原创文章,欢迎阅读,如果您想转载,请在第一行醒目注明原作者和原始链接。

为了方便追查和确认软件bug等问题,给软件或者库赋予版本号是个好办法。

最简单的版本号管理是记录编译时间:

cout<<"build time:"<<__DATE__<<" "<<__TIME__<<endl;

还有一种高级的方法是使用svn版本号,还有一种是用版本号命名法。

我来分享一下在程序或者库中嵌入svn版本号的方法。

Windows平台
可以使用 SubWCRev.exe 工具,这个是乌龟svn(Tortoise svn)自带的一个版本查看工具。
如果安装了乌龟svn,他的路径在类似如下的位置:
"D:\Program Files\TortoiseSVN\bin\SubWCRev.exe"
可以用此工具自动检查代码的svn版本并生成到 .h 文件,其他用法请自己看帮助,不带任何参数就显示帮助。

1. 为了方便,把 SubWCRev.exe 考到工程目录下。
2. 创建模版文件 svnversion_template.h ,内容为  #define SVN_VERSION $WCREV$ 
3. 执行命令  SubWCRev.exe <工程目录> svnversion_template.h svnversion.h

这样就生成了一个版本头文件 svnversion.h ,内容为  #define SVN_VERSION 60163

现在就把svn版本号自动的定义在 .h 文件中了。
只需要在GetVersion接口中使用宏 SVN_VERSION 就可以了。
PS:大版本号应该宏定义 BIG_VER 并手工改,svn版本号可以这样自动获取。

为了省去每次手动执行 SubWCRev 的麻烦,可以把这个命令配置到vs的生成事件中去。

Linux平台
也是自动生成一个 svnversion.h 文件,不过linux更加简单,直接用脚本。

#!/bin/bash
codedir=$PWD/..
version=$(svn info $codedir|grep "的版本"|awk -F': ' '{print $2}')
if [ -z "$version" ] ; then
    version=
fi
echo "#define SVN_VERSION $version" > svnversion.h

在make编译之前,先调用这个脚本就搞定了。

在C++程序中自动加入svn版本号的更多相关文章

  1. 工具——代码中自动生成SVN版本号

    本节和大家讨论一下程序集版本最后一位使用SVN版本号的自动生成方法,这里就向大家简单介绍一下.在进行自动部署的时候,经常需要用脚本获取程序的最新版本号.现在我们定义每个程序集的版本信息的最末段表示SV ...

  2. 在打包程序中自动安装SQL Server数据库 .

    原文:在打包程序中自动安装SQL Server数据库 . 1.创建安装项目“Setup1”安装项目 在“文件”菜单上指向“添加项目”,然后选择“新建项目”. 在“添加新项目”对话框中,选择“项目类型” ...

  3. spring boot 发布自动生成svn版本号

    通过Jenkins构建发布spring boot项目时,常常有需求,需要把Svn的版本号更新到项目的版本上,通过有两种解决方案: 1. 通过shell命令对配置文件中的指定字符进行替换, 如: 配置文 ...

  4. windows系统下,在C#程序中自动安装字体

    在Windows系统中,原有自带的字体样式有限,有时候我们的程序会使用到个别稀有或系统不自带的字体.因此我们需要将字体打包到程序中,当程序启动时,检测系统是否有该字体,如果没有则安装该字体,也可以动态 ...

  5. c++代码中,使用svn版本号作为程序版本号的实现方法

    1.编写版本模板文件 #ifndef _VERSIONSVN_H_#define _VERSIONSVN_H_#define VER_REVISIONSVN $WCREV$#endif //!_VER ...

  6. 自己主动化的在程序中显示SVN版本号

    有时候会有这种情况,策划拿着应用过来提一个bug,但我们却不好确定策划的手机上装的应用相应的是那个代码版本号. 为了解决问题.我们希望能在应用上显示出当前应用所相应的代码版本号,即svn版本号. 构想 ...

  7. VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中

    在开发项目时,需要知道当前发布的到底是哪个版本,比较好的方式就是获取SVN的版本来作为项目的版本.项目版本一般由主版本.次版本.内部版本.修改版本四个部分组成,我们获取的SVN版本就作为修改版本即可. ...

  8. Android Gradle实用技巧——APK文件名中加上SVN版本号,日期等

    有时候,我们会希望能把APK文件名上带上打包日期,打包时svn的版本号,应用版本号等.当然这些也可以手动添加,但是手动的话也未免太不优雅了,而且可能会出错. 利用Gradle,我们可以让打包出来的ap ...

  9. 利用ant脚本 自动构建svn增量/全量 系统程序升级包【转】

    引文:我们公司是做自己使用产品,迭代更新周期短,每次都花费较多时间和精力打包做增量更新,发现了一篇文章用于 自动构建svn增量/全量 系统程序升级包,收藏之,希望可以通过学习,更加简化我们的工作. 文 ...

随机推荐

  1. 当git上文件名大小写重命名的修改时(git大小写敏感/默认不敏感),如何重命名并提交

    git默认是大小写不敏感!!! 加了感叹号是什么意思呢,意思就是这本身就是一个坑,本人使用的IDE是idea(网上说Eclipse可以避开问题),这个IDE本身就集成了git,但是如果要在termin ...

  2. Address localhost:1099 is already in use

    在 ItelliJ idea中创建了Servlet,启动tomcat时系统报错: Error running Tomcat 7.0.47: Address localhost:1099 is alre ...

  3. js 拷贝clone

    array Array.prototype.clone=function(){ return this.slice(0); } 对象 var o = {a: [1]}; //浅拷贝 var o1 = ...

  4. 硬件电路io口控制继电器电路

    元件如下: 二极管 8050三极管 1K电阻 10K电阻 光耦817 5V继电器 各一个 ———————————————————————————————————— 电路图如下: 当IO是低电平的时候, ...

  5. python:文件的逐行操作

    逐行遍历文件: 方法一:一次读入,分行处理: readlines() 缺点:一次读入所有信息,对于大文件来说会消耗很多计算机内存 fname = input('请输入要打开的文件名称:') fo = ...

  6. LeetCode - Unique Email Addresses

    Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...

  7. [Java] Thread -- 避免Race Condition (Synchronized)

    public class TestRaceCondition implements Runnable{ public static int counter = 0; public static voi ...

  8. CSV表格融合

    常用表格融合函数 1 merge() 用于融合的函数 https://blog.csdn.net/brucewong0516/article/details/82707492 pd.merge(lef ...

  9. /etc/hosts和/etc/hostname区别

    /etc/hosts主要是ip和域名的对应 /etc/hostname主要是本地主机域名(本地主机名修改过后需要重启服务器才能生效) 如果我想在另一台linux主机里面使用域名访问上面这台主机A,只需 ...

  10. js中常见事件

    1.onblur:(使用在表单元素中,当元素失去焦点的时候执行) 2.onchange:(使用在表单元素中,当某些东西改变是执行) 3.onclick:(鼠标点击一个元素时执行) 4.ondblcli ...