c++代码中调用git相关信息

两种方式管理:

  • 使用脚本管理,在编译工程前,先编译脚本,生成version.h,代码里include “version.h”;
  • 在pro项目配置文件中,利用system添加全局define;(推荐)

方法一 脚本管理

git配置

使用git管理qt工程项目,使用git tag添加标签。

  • 打标签:git tag -a <version>
  • 查看版本号:git describe --tags --dirty

编写windows脚本

version.cmd

1
2
3
4
5
6
7
8
9
10
11
12
13
del version.h

echo #ifndef VERSION_H >>version.h
echo #define VERSION_H >>version.h
echo. >>version.h
echo. >>version.h

for /f "delims=" %%i in ('git describe --tags --dirty') do (set a=%%i)
echo #define GIT_VERSION "%a%" >>version.h
echo. >>version.h
echo. >>version.h

echo #endif // VERSION_H >>version.h

qtcreator工程中添加构建步骤

在Projects->Build Settings->Build Steps->Add BuildStep(Custom Process Step),编辑:

  • Command: version.cmd
  • Working directory: %{sourceDir}

其他保持不变。

将该Step移动到qmake步骤之前。如下:
配置图

Working directory还可以根据需要设置为:

  • %{CurrentProject:Name}
  • %{CurrentKit:FileSystemName}
  • %{CurrentBuild:Name}
  • %{buildDir}
  • %{sourceDir}

方法二 pro中添加

编辑.pro工程文件,添加以下内容:

1
2
3
4
5
6
7
8
9
10
# define git information
exists(../.git) {
GIT_BRANCH = $$system(git rev-parse --abbrev-ref HEAD)
# GIT_TIME = $$system(git show --oneline --format=\"%ci%H\" -s HEAD)
GIT_DESCRIBE = $$system(git describe --tags --abbrev=8 --dirty --always)
GIT_PROCESS = "$${GIT_BRANCH} - $${GIT_DESCRIBE}"
} else {
GIT_PROCESS = None
}
DEFINES += GIT_PROCESS=\"\\\"$${GIT_PROCESS}\"\\\"

在代码需要的地方调用即可,如: qDebug() << GIT_PROCESS;