Linux C++目标中添加git版本信息
- 项目代码根目录下添加一个cmake文件git_version.cmake,内容如下:
# get git hash
macro(get_git_hash _git_hash)
set(ENV{GIT_DIR} ${PROJECT_SOURCE_DIR}/.git)
execute_process(
COMMAND git rev-parse --short HEAD
OUTPUT_VARIABLE ${_git_hash}
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_VARIABLE GET_GIT_VERSION_FAILED
)
#IF(GET_GIT_VERSION_FAILED)
# MESSAGE(FATAL_ERROR ${GET_GIT_VERSION_FAILED})
#ELSE(GET_GIT_VERSION_FAILED)
# MESSAGE("-- Current Git Commit ID: ${_git_hash}")
# add_definitions(-DDEFINED_GIT_CID)
#ENDIF(GET_GIT_VERSION_FAILED)
endmacro()
# get git branch
macro(get_git_branch _git_branch)
set(ENV{GIT_DIR} ${PROJECT_SOURCE_DIR}/.git)
execute_process(COMMAND git symbolic-ref --short -q HEAD
#WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE ${_git_branch}
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
endmacro()
# 生成版本描述字符串类似 TAG-X-gHASH
macro(get_git_tag_hash _git_tag_hash)
set(ENV{GIT_DIR} ${PROJECT_SOURCE_DIR}/.git)
execute_process(COMMAND git describe --abbrev=6 --dirty --always --tags
# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE ${_git_tag_hash}
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
endmacro()
# 获取最新 commit 日期,YYYY-MM-DD
macro(get_git_date_time _git_date_time)
set(ENV{GIT_DIR} ${PROJECT_SOURCE_DIR}/.git)
execute_process(COMMAND git log -1 --format=%cd --date=short
# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE ${_git_date_time}
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
endmacro()
- 在根目录CMakeLists.txt中添加:
set(GIT_HASH "")
set(GIT_BRANCH "")
set(GIT_DATETIME "")
get_git_hash(GIT_HASH)
get_git_branch(GIT_BRANCH)
get_git_date_time(GIT_DATETIME)
message(STATUS "git hash: ${GIT_HASH}, ${GIT_BRANCH}, ${GIT_DATETIME}")
- 在src目录增加一个 repo_version.h.cmake 的文件:
#define MAGE_VERSION_MAJOR @MAGE_VERSION_MAJOR@
#define MAGE_VERSION_MINOR @MAGE_VERSION_MINOR@
#define MAGE_VERSION_PATCH @MAGE_VERSION_PATCH@
#define MAGE_VERSION_GIT_HEAD_VERSION "@GIT_HASH@"
#define MAGE_VERSION_GIT_BRANCH "@GIT_BRANCH@"
#define MAGE_VERSION_GIT_DATETIME "@GIT_DATETIME@"
其中 major、minor 和 patch 是传统的软件版本规范,如果你的项目里不需要的话,可以删除掉,如果保留就需要在 CMake 中赋值。除了这 3 个之外,就是最重要的 "@MAGE_VERSION_GIT_HEAD_VERSION@",即我们从 git 里获取的版本信息,它要和 EXECUTE_PROCESS()指令的 OUTPUT_VARIABLE 的变量名保持一致,注意我们用双引号把它括起来当作一个字符串使用。
增加以下代码生成头文件:
configure_file("src/repo_version.h.cmake" "repo_version.h")
运行 cmake,在当前目录下(准确的说是 cmake 的 PROJECT_BINARY_DIR 目录)就生成了 repo_version.h 文件:
#define MAGE_VERSION_MAJOR
#define MAGE_VERSION_MINOR
#define MAGE_VERSION_PATCH
#define MAGE_VERSION_GIT_HEAD_VERSION "ec99a2f"
#define MAGE_VERSION_GIT_BRANCH "default_startup_param"
#define MAGE_VERSION_GIT_DATETIME "2022-01-26"
Linux C++目标中添加git版本信息的更多相关文章
- Spring Boot中使用Actuator的/info端点输出Git版本信息
对于Spring Boot的Actuator模块相信大家已经不陌生了,尤其对于其中的/health./metrics等强大端点已经不陌生(如您还不了解Actuator模块,建议先阅读<Sprin ...
- Linux下查看网卡驱动和版本信息
Linux下查看网卡驱动和版本信息 查看网卡生产厂商和信号 查看基本信息:lspci 查看详细信息:lspci -vvv # 3个小写的v 查看网卡信息:lspci | grep Ethernet 查 ...
- 如何在Android Studio中添加注释模板信息?
如何在Android Studio中添加注释模板信息? 在开发程序的时候,我们一般都会给文件自动添加上一些关于文件的注释信息,比如开发者的名字,开发的时间,开发者的联系方式等等.那么在android ...
- webstorm2017中添加git
1.pc中先安装git 2.在webstorm中选择VCS -> Checkout from Version Control -> Git Git Repository URL: [gi ...
- 详解在Visual Studio中使用git版本系统[转]
这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. 一 .安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了 ...
- 详解在visual studio中使用git版本系统(图文)
很多人已经在使用git(或正在转移到git上),在github.com上,也看到园子里不少同学的开源项目,非常不错.但相关教程似乎不多,所以趁着我自己的开源项目源码托管(https://github. ...
- 在visual studio中使用git版本系统(zz)
第一部分: 安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了,图形化工具(无论是 git extentions ,还是TortoiseGit),都只不 ...
- 【转】详解在visual studio中使用git版本系统(图文)
http://blog.csdn.net/wojilu/article/details/6976230 很多人已经在使用git(或正在转移到git上),在github.com上,也看到不少国内同学的开 ...
- Windows XP 下如何使用Qt Creator中的Git版本控制功能
原文地址:http://www.qtcn.org/bbs/simple/?t16960.html Qt Creator是针对Qt应用开发平台专门设计的IDE开发工具,集成了很多功能,分别有win ...
- linux下nginx编译安装、版本信息修改
环境 centos 7 安装依赖包 yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib zlib-devel opens ...
随机推荐
- KingbaseES R3 集群主库归档失败案例
案例说明: 本案例用于KingbaseES R3集群归档进程归档日志失败的处理,对于一线的生产环境具有 一定的参考意义. 数据库版本: TEST=# select version(); VERSION ...
- 手写tomcat——编写一个提供servlet能力的 http服务器
点击查看代码 package com.grady.diytomcat; import com.grady.diytomcat.handler.RequestHandler; import org.do ...
- Windows 10 20H1 2004新功能
Windows 10的年度更新版本20H1即将问世.目前可以从insider preview渠道中获得.这个版本中看上去对搜索功能做了不小的改进.包括搜索的磁盘占用率以及搜索的一些展示方式. 其它的一 ...
- 7、System类
System类 常见方法 exit 退出当前程序 System.out.println("ok1"); //1. exit(0) 表示程序退出 //2. 0 表示一个状态,正常的状 ...
- windows系统下使用bat脚本文件设置 tomcat 系统环境变量
说明:在一个bat文件中设置tomcat环境变量后,不能直接使用,需要另起一个bat文件才能使用 号开头的行不要写在bat文件中 # tomcat1.bat # 这个bat文件实现的功能:设置环境变量 ...
- Java调用C++动态链接库——Jni
最近项目需要,将C++的算法工程编译成动态链接库,交给 Java后台当作函数库调用.就去了解了下Jni.使用起来还是比较方便的. 1. 首先编写Java的调用类.例如: public clas ...
- 谣言检测——(PSA)《Probing Spurious Correlations in Popular Event-Based Rumor Detection Benchmarks》
论文信息 论文标题:Probing Spurious Correlations in Popular Event-Based Rumor Detection Benchmarks论文作者:Jiayin ...
- [笔记] 一种快速求 1 ~ n 逆元的方法
我们现在要求1~n在mod m意义下的逆元(n<m,m为素数). 对于一个[1,n]中的数i,我们令\(k=\lfloor\frac{m}{i}\rfloor,r=m \ mod \ i\) 然 ...
- [CG从零开始] 3. 安装 pyassimp 库加载模型文件
assimp 是一个开源的模型加载库,支持非常多的格式,还有许多语言的 binding,这里我们选用 assimp 的 python 的 binding 来加载模型文件.不过社区主要是在维护 assi ...
- 对循环神经网络参数的理解|LSTM RNN Input_size Batch Sequence
在很多博客和知乎中我看到了许多对于pytorch框架中RNN接口的一些解析,但都较为浅显甚至出现一些不准确的理解,在这里我想阐述下我对于pytorch中RNN接口的参数的理解. 我们经常看到的RNN网 ...