cmake自动添加git版本信息到生成代码

文章目录

需要用到的三个知识点

  • git 相关命令

获取commit hash值,log -1 --pretty=format:%H
获取当前分支,git symbolic-ref --short -q HEAD
cmake自动添加git版本信息到生成代码

  • cmake中执行外部命令
    execute_process
  • cmake中自动生成文件
    configure_file

获取git版本信息

获取git版本信息需要在cmake中调用外部命令,可使用execute_process语句完成。

set(COMMIT_HASH "")
set(BRANCH_NAME "")
find_package(Git QUIET)
if(GIT_FOUND)
execute_process(
    COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%H
    OUTPUT_VARIABLE COMMIT_HASH
    OUTPUT_STRIP_TRAILING_WHITESPACE
    ERROR_QUIET
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
execute_process(
    COMMAND ${GIT_EXECUTABLE} symbolic-ref --short -q HEAD
    OUTPUT_VARIABLE BRANCH_NAME
    OUTPUT_STRIP_TRAILING_WHITESPACE
    ERROR_QUIET
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()
message(STATUS "Git version is ${BRANCH_NAME}:${COMMIT_HASH}")

运行 cmake ..
cmake自动添加git版本信息到生成代码

生成包含git版本信息的头文件

首先建立一个配置文件,ver.h.ini.此处放在CMakeLists.txt目录下。

#ifndef _GIT_VER_
#define _GIT_VER_

#include <string>

const std::string commit_hash = "@COMMIT_HASH@";
const std::string branch_name = "@BRANCH_NAME@";

#endif

CMakeLists.txt中添加以下命令,

configure_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/ver.h.ini
  ${CMAKE_BINARY_DIR}/ver.h
  @ONLY
  )

运行cmake ..
可以发现在.\bin目录下已经生成ver.h文件,

#ifndef _GIT_VER_
#define _GIT_VER_

#include <string>

const std::string commit_hash = "7eccf2a891daf7d9b11608967a44dbcb07349a09";
const std::string branch_name = "master";

#endif

代码调用

在主函数中打印版本信息,

#include <stdio.h>
#include "ver.h"

int main(int argc, char* argv[]) {
  printf("version %s:%s\n", branch_name.c_str(), commit_hash.c_str());
  return 0;
}

输出如下,
cmake自动添加git版本信息到生成代码

上一篇:树形DP-战略游戏


下一篇:道路建设 (Ver. I)