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 ...
随机推荐
- 对表白墙wxss的解释
一.index.wxss 1 /* 信息 */ 2 .Xinxi{ 3 display: flex; 4 flex-wrap: wrap; 5 margin: 0rpx 1%; 6 } 7 8 9 / ...
- MySQL读写分离之——ProxySQL
文章转载自:https://blog.csdn.net/u012280685/article/details/113520692?spm=1001.2014.3001.5501 实现一个简单的读写分离 ...
- MySQL数据库中配置文件 read_only 参数的有关说明
1.对于MySQL单实例数据库和master库,如果需要设置为只读状态,需要进行如下操作和设置: 将MySQL设置为只读状态的命令(可以登录mysql执行下面命令, 或者在my.cnf配置文件中添加& ...
- 谈谈对K8S CNI、CRI和CSI插件的理解
- es分片数相关知识
分片数量 总分片数=主分片数 *(副分片数+1) 如下创建索引配置表示,总分片数=1 *(1+4),表示总共5个分片. "settings": { "number_of_ ...
- centos7使用yum方式安装redis6
yum -y install epel-release wget make gcc-c++ cd /opt wget https://download.redis.io/releases/redis- ...
- MySQL 窗口函数
1. 窗口函数概念和语法 窗口函数对一组查询行执行类似聚合的操作.然而,聚合操作将查询行分组到单个结果行,而窗口函数为每个查询行产生一个结果: 函数求值发生的行称为当前行 与发生函数求值的当前行相关的 ...
- C++函数模板和类模板的使用
一.函数模板 #include<iostream>using namespace std;template<class T1,class T2>T1 add(T1 x,T2 y ...
- 关于JDK8中stream的用法小总结。
import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; public class Ma ...
- 3.ElasticSearch系列之Docker本地部署
对于之前的部署方式一般用于生产环境,而对于学习而言Docker方式快速部署就好了,本示例在window10环境下进行. 1. Docker使用Elasticsearch 需要对vm.max_map_c ...