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值。