cmake-获取githash和tag
git_hash
git log -1 --format="%h"
#获取最新commit的hash短值,
-n表示获得前几条的数据:-1最新一条
%h表示截取hash值的前一段,%H则表示整个hash值
git tag
git describe --abbrev=6 --always --tags
#获取最近的tags名称,如果没有tags会获得最新commit的hash短值,如果代码没有git管理则获得空
让程序获取版本号和hash
利用git的tags名字做版本号,commit的hash值做githash参数
在CMakeLists.txt添加如下,新增两个自定义的变量,将git_hash存在GIT_HASH变量、tags名字存在VERSION变量里
set(GIT_HASH "")
set(VERSION "")
find_package(Git QUIET)
if(GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%h
OUTPUT_VARIABLE GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --abbrev=6 --always --tags
OUTPUT_VARIABLE VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()
message(STATUS "Git version is ${VERSION}:${GIT_HASH}")
#打印版本和GitHash值
之后可以利用cmake的配置头文件功能,将变量在cmake构建阶段配置成头文件,在CMakeLists.txt添加如下代码
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/version.h.in
${CMAKE_CURRENT_SOURCE_DIR}/src/version.h
@ONLY
)
在CMakeLists.txt添加version.h.in文件,书写需要配置的头文件的格式
#ifndef __VERSION_H
#define __VERSION_H
#define CAMERA_PROJECT_VERSION "@VERSION@"
#define CAMERA_PROJECT_GIT_HASH "@GIT_HASH@"
#endif
这样,在cmake之后,就会生成 “源码/src/version.h” 头文件。代码包含头文件使用宏取得版本号和githash值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术