visual studio c++代码中使用git版本信息

目录

  • 总体思路
    • 自动代码生成
    • 使用自动生成的代码
    • 集成
    • 运行结果

总体思路

本篇使用的方法不更改visual studio的任何设置,完全使用的是“蛮力”。

  1. 使用python写成的tool获取版本信息,并auto code为一个.h文件,文件中仅是一个git版本信息类
  2. 在需要git版本信息的代码中,使用1中自动生成的类
  3. 将autocode, 代码编译两个过程写到一个批处理

自动代码生成

我们希望将git 最后一次commit的hash值作为版本信息,于是我们这一步的目标是自动生成以下代码:

#pragma once
#include 
class CVersion {
 public:
     static const char* version () {
        return "commit a6a4a5804c35529057a220c65a10f95976279071\nAuthor: xq <309905109.qq.com>\nDate:   Fri Oct 12 16:25:25 2018 +0800\n\n    add auto test\n";      }
};

我写的python文件完成自动生成功能,代码如下(此处可根据跟人需要修改):

import subprocess
cmd  = ['git', "log", "-1"]
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
out = (proc.stdout).decode('utf-8')
gitversion = out.replace("\n","\\n")
print(out)

codefilename = "Version.h"
with open(codefilename, "w") as outfile:
	outfile.write("#pragma once\n")
	outfile.write("#include \n")
	outfile.write("class CVersion {\n")
	outfile.write(" public:\n")
	outfile.write("     static const char* version () {\n")
	outfile.write("        return \"{version}\";".format(version=gitversion))
	outfile.write("      }\n")
	outfile.write("};\n")

使用自动生成的代码

CVersion类中只有一个静态方法,返回git版本信息, 可直接使用,我的程序用作为日志信息打印出来,代码是这个样子的:

#include "Version.h"
...
    CCoreMle::trace("", "\n\n\n%s\n\n", CVersion::version());
...

集成

要想每次编译的时候上边的过程自动执行, 可以写下边一个批处理文件build.bat:

del ..\Serv\Version.h
python ..\tools\vercodegen.py
move Version.h ..\Serv\
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.com"  ..\Serv\Serv.sln /Rebuild

这个样子的话,整个编译过程就自动化起来了。

运行结果

最终运行出来的样子是这样的,在日志里打印出了git 最后一次commit的信息:
visual studio c++代码中使用git版本信息_第1张图片

你可能感兴趣的:(c++)