【CMake】git commit信息打印

# CMake中变量设置及打印

Git相关信息代码如下,在CMakeLists.txt中照搬配置即可,OUTPUT_VARIABLE后为变量名,可自行修改,其中

GIT_COMMIT_SHA1 为 commit-id或tag-id

GIT_COMMIT_DATE 为 提交时间

GIT_COMMIT_SUBJECT 为 commit-message

GIT_BRANCH_NAME 为 分支名

find_package(Git)
execute_process(COMMAND
        "${GIT_EXECUTABLE}" describe --always --abbrev=10 --dirty --tags
        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
        OUTPUT_VARIABLE GIT_COMMIT_SHA1
        ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
)

execute_process(COMMAND
        "${GIT_EXECUTABLE}" log -1 --format=%ad --date=local
        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
        OUTPUT_VARIABLE GIT_COMMIT_DATE
        ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
)

execute_process(COMMAND
        "${GIT_EXECUTABLE}" log -1 --format=%s
        WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
        OUTPUT_VARIABLE GIT_COMMIT_SUBJECT
        ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
)

execute_process(COMMAND
    "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD
    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
    OUTPUT_VARIABLE GIT_BRANCH_NAME
    ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
)

message(STATUS "")
message(STATUS "============================== GIT COMMIT LOG ==============================")
message(STATUS "=== update git commit SHA1     :    ${GIT_COMMIT_SHA1}")
message(STATUS "=== update git branch name     :    ${GIT_BRANCH_NAME}")
message(STATUS "=== update git commit date     :    ${GIT_COMMIT_DATE}")
message(STATUS "=== update git commit subject  :    ${GIT_COMMIT_SUBJECT}")
message(STATUS "============================================================================")
message(STATUS "")

打印效果如下

-- ============================== GIT COMMIT LOG ==============================
-- === update git commit SHA1     :    v0.0
-- === update git branch name     :    main
-- === update git commit date     :    Mon May 15 18:25:17 2023
-- === update git commit subject  :    print version
-- ============================================================================

# 在程序内使用或打印commit信息

上述变量的作用域在CMakeLists中,若要在程序中获取上述变量的值,可通过下述配置

# CMakeLists.txt

在CMakeLists.txt中配置如下代码

configure_file(version.h.in version.h)
# message("PROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}")
target_include_directories(project
        PUBLIC "${PROJECT_BINARY_DIR}"
)

configure_file会根据version.h.in生成version.h,生成位置在PROJECT_BINARY_DIR,可通过message打印查看路径,一般在build文件夹内,其中version.h.in需手动写入所需传递的变量,如下

# version.h.in

const char* GIT_COMMIT_SHA1 = "@GIT_COMMIT_SHA1@";
const char* GIT_COMMIT_DATE = "@GIT_COMMIT_DATE@";
const char* GIT_COMMIT_SUBJECT = "@GIT_COMMIT_SUBJECT@";
const char* GIT_BRANCH_NAME = "@GIT_BRANCH_NAME@";

生成的version.h如下 # version.h

const char* GIT_COMMIT_SHA1 = "v0.0";
const char* GIT_COMMIT_DATE = "Mon May 15 18:25:17 2023";
const char* GIT_COMMIT_SUBJECT = "print version";
const char* GIT_BRANCH_NAME = "main";

至此GIT_COMMIT_SHA1等4个参数即生成并传递到函数内部,在所需使用的文件内include进version.h即可,例如

# print_version.cpp

#include <iostream>
#include "version.h"

extern const char* GIT_COMMIT_DATE;

int main(int argc, char* argv[]) {
    std::cout << "commit date: " << GIT_COMMIT_DATE << std::endl;
    return 0;
}

则Terminal中打印为

commit date: Mon May 15 18:25:17 2023

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝉鸣居士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值