文章目录
需要用到的三个知识点
- git 相关命令
获取commit hash值,log -1 --pretty=format:%H
获取当前分支,git symbolic-ref --short -q HEAD
- 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 ..
生成包含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;
}
输出如下,