【版本管理】cmake 编译的 c++ 可执行文件输出 git commit 版本(即 hash 值)

问题

常常排查 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值