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

posted @ 2022-05-12 23:22  WuYunTaXue  阅读(442)  评论(0编辑  收藏  举报