获取 Git 版本号和编译时间并将它们传递给 C++ 代码可以通过 CMake 和预处理宏来实现。

下面是详细的步骤和示例代码:

获取 Git 版本号:

使用 execute_process 命令执行 git describe 或其他适合的 Git 命令来获取版本号。
将命令输出保存到一个 CMake 变量中。
获取编译时间:

使用 CMake 的 string(TIMESTAMP …) 命令获取当前的系统时间,并将其格式化为你想要的格式。
将获取到的信息传递给 C++ 代码:

使用 target_compile_definitions 命令在 CMake 中定义预处理宏,将 Git 版本号和编译时间作为字符串传递给 C++ 代码。

示例:

假设我们仍然有一个简单的项目结构,包含以下文件:

CMakeLists.txt:用于配置 CMake 构建过程。
main.cpp:包含主要的 C++ 代码,用于打印 Git 版本号和编译时间。
CMakeLists.txt 文件内容:

cmake_minimum_required(VERSION 3.0)
project(GetGitVersionAndBuildTime)

# Execute Git command to get the Git version
execute_process(
    COMMAND git describe --abbrev=7 --always --tags
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    OUTPUT_VARIABLE GIT_VERSION
    OUTPUT_STRIP_TRAILING_WHITESPACE
    ERROR_QUIET
)

# Define a CMake variable to pass Git version to C++ code
string(STRIP ${GIT_VERSION} GIT_VERSION)  # Trim any leading/trailing whitespace

# Get current date and time
string(TIMESTAMP BUILD_TIME "%Y-%m-%d %H:%M:%S")

# Print Git version and build time for verification
message("Git version: ${GIT_VERSION}")
message("Build time: ${BUILD_TIME}")

# Compile C++ executable
add_executable(get_git_version_and_build_time main.cpp)

# Pass Git version and build time to C++ code using preprocessor macros
target_compile_definitions(get_git_version_and_build_time 
    PRIVATE GIT_VERSION="${GIT_VERSION}" BUILD_TIME="${BUILD_TIME}")

main.cpp 文件内容:

#include <iostream>
int main() {
    std::cout << "Git version: " << GIT_VERSION << std::endl;
    std::cout << "Build time: " << BUILD_TIME << std::endl;
    return 0;
}

释和注意事项:

execute_process 命令:与之前一样,这个命令用于获取当前 Git 仓库的版本号,并将其保存到 GIT_VERSION 变量中。

string(TIMESTAMP …) 命令:用于获取当前的系统时间,并将其格式化为 %Y-%m-%d %H:%M:%S 这样的字符串格式。可以根据需要选择其他格式。

target_compile_definitions 命令:这个命令用来定义编译目标的预处理宏。在这里,我们将 GIT_VERSION 和 BUILD_TIME 作为宏传递给 get_git_version_and_build_time 可执行文件。

这样,当你运行 get_git_version_and_build_time 可执行文件时,它将会打印出 Git 版本号和编译时间信息,这些信息在编译时动态地获取并嵌入到程序中,非常适合需要版本控制和构建时间追溯的应用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值