在VS 项目中利用Git自动生成编译版本信息

对于源代码一直在迭代更新的项目,希望在每次生成项目的时候,都能自动地更新代码中的版本信息,以便测试发现问题的时候,能跟踪到对应版本的源代码。此处以VS C/C++项目为例,看怎么利用git自动生成版本信息。

1. 获取版本信息,保存到 h 文件。

利用git log命令获取当前工作目录的版本信息.

git log -1 --pretty=format:"%cd hash:%h"

结果:

Tue Apr 17 11:51:45 2018 +0800 hash:4d2bc3e

其中 -1 表示仅获取当前分支最近的一条提交信息,--pretty=format 用于指定输出的字符格式,%cd表示提交日期,%h表示提交对象的简短哈希字串,详细使用方法参考《Git 基础 - 查看提交历史》。

将上面输出的结果保存为 h 文件,这里利用 python3 来实现,当然也可以用批处理器脚本来做。

此处需要用到 GitPython 库,使用pip安装:

pip install GitPython

安装好GitPython后,将下面 python 程序保存到 git 工作目录下的 getver.py 文件中。

# -*- coding: utf-8 -*-
from git import Repo
import tkinter
import tkinter.messagebox

# 有未提交更改时提示
repo = Repo('.')
verstr = repo.git.log('-1','--pretty=format:%cd hash:%h')
if repo.is_dirty():
    a=tkinter.messagebox.askokcancel('提示', '有未提交修改, 确定更新版本信息?')
    if not a:
        print("取消更新")
        raise
    verstr += ' modified'

fi = open('./gitver.h', 'w', encoding='utf-8')
fstr = '#ifndef _GITVER_H\n#define _GITVER_H\n#define GIT_VER "' + verstr + '"\n#endif'
fi.write(fstr)
fi.close()

print('成功更新git信息')
print(verstr)

运行上面python程序,则会生成如下的 gitver.h 文件:

#ifndef _GITVER_H
#define _GITVER_H
#define GIT_VER "Tue Apr 17 11:51:45 2018 +0800 hash:4d2bc3e"
#endif
2. 在项目中包含 gitver.h 头文件,引用版本信息。

示例:

#include "gitver.h"
char* getVersion()
{
    static char verstr[] = GIT_VER;
    return verstr;
}
3. 项目生成前自动运行脚本。

这是实现自动化的关键一步。VS 2015 允许设置在生成项目前要运行的命令,在“项目属性→生成事件→预先生成事件”中:


这里添加了两条命令,先是将当前目录切换到项目目录,然后运行 python 程序。

至此,每次生成项目的话都会自动地更新版本信息了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值