cmake编译时候加入git的版本号和分支名字

复制代码
# get git hash
macro(get_git_hash _git_hash)
    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}
        )
    endif()
endmacro()

# get git branch
macro(get_git_branch _git_branch)
    find_package(Git QUIET)
    if(GIT_FOUND)
      execute_process(
        COMMAND ${GIT_EXECUTABLE} symbolic-ref --short -q HEAD
        OUTPUT_VARIABLE ${_git_branch}
        OUTPUT_STRIP_TRAILING_WHITESPACE
        ERROR_QUIET
        WORKING_DIRECTORY
          ${CMAKE_CURRENT_SOURCE_DIR}
        )
    endif()
endmacro()

# 获取当前的GIT_HASH
set(GIT_HASH "unknown")
get_git_hash(GIT_HASH)
add_definitions(-DMY_GIT_VERSION="${GIT_HASH}")

# 获取当前的分支
set(GIT_BRANCH "unknown")
get_git_branch(GIT_BRANCH)
add_definitions(-DMY_GIT_BRANCH="${GIT_BRANCH}")
cpp 复制代码
#define STRING(R) #R
#define AS_STRING(R) STRING(R)
std::cout<<"git version:"<<AS_STRING(GIT_VERSION)<<" git branch:"<<AS_STRING(GIT_BRANCH));

AS_STRING(GIT_VERSION)这句只会展开成GIT_VERSION,而不会再往下一层把GIT_VERSION也展开成一个具体的数值,因此,我们定义一个STRING(GIT_VERSION)的宏做中间转换,就能正常把AS_STRING(GIT_VERSION)展开STRING(GIT_VERSION),最终展开成具体的git 版本号。

相关推荐
玖釉-2 分钟前
二叉树展开为链表:从先序遍历到原地指针重排
c++·windows·算法·leetcode·链表
Mister西泽26 分钟前
C++ Primer Plus 第六版 编程练习题及详细答案
开发语言·c++·学习·visual studio
Qt程序员33 分钟前
从上电到系统就绪:ARM+U-Boot 嵌入式 Linux 启动流程
linux·运维·c++·内核·设备树·嵌入式·ram
cany10002 小时前
C++ -- lambda捕获
c++
Kilicc_2 小时前
C++知识点—03 <C++宏代码生成/宏反射写法>
c++
RuiZN4 小时前
UE5 UObject类详解
c++·ue5
ZhangShao06074 小时前
题解:AT_abc459_e
c++
chengO_o4 小时前
AVL树详解与实现(C++)
数据结构·c++·avl树·平衡二叉搜索树
玉树临风ives4 小时前
atcoder ABC 458 题解
数据结构·c++·算法
chengO_o4 小时前
STL关联式容器:map 与 set 的使用
c++·stl·set·map·平衡二叉搜索树