
【版本管理】cmake 编译的 c++ 可执行文件输出 git commit 版本(即 hash 值)
常常排查 bug 时,不知道当前运行的可执行文件到底是哪个版本代码编译出来的,无法快速判断需要修改哪一份代码。因此需要输出可执行文件的源码 git commit 版本信息,定位代码版本。
·
问题
常常排查 bug 时,不知道当前运行的可执行文件到底是哪个版本代码编译出来的,无法快速判断需要修改哪一份代码。因此需要输出可执行文件的源码 git commit 版本信息,定位代码版本。
解决方法
原理:cmake 时获取当前代码库的 git 信息并传入可执行文件。
注意事项:编译环境里需要有 git,完全重新 cmake-make 编译才能更新 git 信息。
1. cmake 中获取 git version
CMakeLists.txt
内容如下
project(version_ctl)
add_executable(
${PROJECT_NAME}
src/main.cpp
)
# 获取 Git 版本信息
execute_process(
COMMAND git rev-parse HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# 将 Git 版本信息传递给编译器
target_compile_definitions(
${PROJECT_NAME}
PRIVATE
GIT_VERSION="${GIT_VERSION}"
)
# 输出获取的 Git 版本信息
message(STATUS "Git Version: ${GIT_VERSION}")
2. 程序中输出 git version
main.cpp
内容如下
#include <cstdio>
#include <string>
int main(int argc, char** argv) {
// 有且只有 -v 参数时,输出短 git commit 版本和完整 git commit 版本
if (argc == 2 && std::string(argv[1]) == "-v") {
printf("git version: %.7s, %s", GIT_VERSION, GIT_VERSION);
return 0;
}
// 其他内容
return 0;
}
3. 运行效果
./version_ctl -v
git version: 8085844, 80858442e6b42ad4dd9963fdd40636d29fced4ba
更多推荐
所有评论(0)