获取 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 --tagsWORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}OUTPUT_VARIABLE GIT_VERSIONOUTPUT_STRIP_TRAILING_WHITESPACEERROR_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 版本号和编译时间信息,这些信息在编译时动态地获取并嵌入到程序中,非常适合需要版本控制和构建时间追溯的应用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音频剪辑里的几种基础操作

音频对于视频的重要性&#xff0c;怎么强调都不为过&#xff0c;它在视频里扮演着举足轻重的角色&#xff0c;对观众有着极为深远的影响。下面为您阐述音频在视频中的关键意义&#xff1a; ① 情感传递&#xff1a;音频有强大的情感传达能力&#xff0c;借助声音的起伏变化、音…

项目标红,识别不了maven项目,解决办法

首先&#xff0c;检查 preferences 其次&#xff0c;检查IDEA 的 jdk。File-》Project Structure 最后&#xff1a; 1. 2. mvn clean install -Dmaven.test.skiptrue 跳过单元测试 maven跳过单元测试-maven.test.skip和skipTests的区别-CSDN博客

CAD框架介绍

1、适用范围&#xff1a;矢量编辑软件如 服装模板软件、CAD软件、绘图软件 2、支持PLT,DXF,PDF,GCode&#xff08;服装裁割指令)等矢量文件导入 3、支持简易的自动手动排料 4、直线&#xff0c;曲线等编辑功能 5、分页输出绘图指令 6、良好的框架结构&#xff1a;绘图引擎…

【MP4】mp4文件详解(二)—— mp文件分析工具

文章目录 一、前言二、MP4文件分析工具1、软件工具1.1、UltraEdit1.2、Hexinator1.3、mp4info1.4、mp4explorer1.5、MediaInfo 2、在线工具2.1、Online Mp4 Parser2.2、MP4Box.js / ISOBMFF Box Structure Viewer 一、前言 MP4文件分析工具可以帮助你查看和分析MP4视频文件中的…

从混乱到有序:Codigger 软件项目体检助力软件项目管理

在软件项目管理的奇妙世界里&#xff0c;程序员可弟哥就像是一位勇敢的探索者&#xff0c;他深知项目管理中那些常见的难题。 项目进度常常如同脱缰的野马&#xff0c;难以掌控&#xff0c;导致交付日期不断延迟&#xff0c;这让可弟哥十分头疼。成本也仿佛是个调皮的小精灵&am…

Vuex、Redux状态管理库

目录 状态管理库 单一事实来源&#xff1a;存储更新所有组件状态 Vuex 安装 配置 src->store index&#xff1a;拆分模块modules vue2 vue3 main index【以Conversation模块为例】【拆分state等属性】 store state() { return state; }类似于 vue中data() retu…

go语言中map学习

在 Go 语言中,map 是一种引用类型,这意味着它有以下特点: 内存结构: map 实际上是一个指向底层数据结构的指针。这个底层数据结构包含键值对的集合。 赋值与传参: 当你给一个变量赋值一个 map 时,或者将 map 作为函数参数传递时,实际上传递的是指针,而不是完整的数据结构副本。…

微软“蓝屏”事件:对全球IT基础设施韧性与安全性的深刻反思

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

数据传输安全--IPSEC

目录 IPSEC IPSEC可以提供的安全服务 IPSEC 协议簇 两种工作模式 传输模式 隧道模式 两个通信保护协议&#xff08;两个安全协议&#xff09; AH&#xff08;鉴别头协议&#xff09; 可以提供的安全服务 报头 安全索引参数SPI 序列号 认证数据 AH保护范围 传输模…

Git_基础命令

git status 查看仓库状态 git branch 查看节点, 当前节点前会被标注*(当前节点是主节点就只能看到主节点, 否则看到主节点与当前节点) git branch xxx 创建名为xxx的分支 git checkout xxx 切换到名为xxx的分支 git checkout -b xxx 创建并切换到名为xxx的分支 推送更新至远程仓…

软考-软件设计师(2)-操作系统概述:多级索引、PV操作、段页式存储、磁盘管理、进程管理、有限自动机、I/O设备管理软件分层等高频考点

场景 软考-软件设计师-操作系统概述模块高频考点整理。 以下为高频考点、知识点汇总,不代表该模块所有知识点覆盖,请以官方教程提纲为准。 注: 博客:霸道流氓气质-CSDN博客 实现 知识点 文件系统多级索引 求文件系统多级索引的最大长度 二级索引=一级索引*一级索引…

vue3使用el-input-number,只能是整数,并且没有四舍五入

效果图 element plus上自带了个属性precision&#xff0c;设置**:precision“0”**,也可以没有小数点&#xff0c;但它这个是四舍五入的&#xff0c;不满足我的需要 我主要用的事件是blur的&#xff0c;input的试过发现值改变了&#xff0c;但是页面显示的没有改变&#xff0c;…

奔跑利润如何释放?来看看怎么分析现货黄金的跟踪止损位

跟踪止损位是现货黄金交易和资金管理中一个重要的概念。我们做现货黄金的时候&#xff0c;将仓位分成两部分&#xff08;或以上&#xff09;。第一部分&#xff0c;我们在首个目标位获利离场&#xff0c;剩下那部分就可以让它奔跑&#xff0c;看看市场会不会走出大行情&#xf…

qt-C++笔记之使用qDebug().noquote()优美地格式化打印json

qt-C笔记之使用qDebug().noquote()优美地格式化打印json code review! 在Qt中&#xff0c;可以使用QJsonDocument和QJsonObject来处理和格式化JSON数据。为了优美地格式化打印JSON数据&#xff0c;可以使用QJsonDocument::toJson()方法&#xff0c;并将其结果传递给qDebug().…

Java 集合中的 Vector 类和 Stack 类

一.介绍 Java 集合框架提供了一组强大的类和接口来处理和操作对象集合。其中&#xff0c;Vector 和 Stack 类提供了以顺序方式存储和管理元素的基本功能。这两个类都是传统集合的一部分&#xff0c;但由于它们的同步性质和特定用例&#xff0c;它们仍然具有相关性。Vector 类实…

心理学通识--自我成长、行动、自尊、自信、幸福

07 应用&#xff1a;用专念来战胜焦虑 通过控制肌肉的紧张与放松来获得对身体的掌控感&#xff0c;就可以从外向内&#xff0c;获得对精神的掌控感&#xff0c;从而减轻焦虑 当我从三数到一时&#xff0c;我就睁开眼睛&#xff0c;很清醒&#xff0c;很宁静 呼吸是联结身体和…

DDoS 究竟在攻击什么?

分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种常见的网络攻击形式&#xff0c;攻击者通过向目标服务端发送大量的请求&#xff0c;使目标服务端无法进行网络连接&#xff0c;无法正常提供服务。 DDoS 攻击通常是由大量的分布在全球各地的 “僵尸” 计算机&#xff08…

STM32F401VET6 PROTEUS8 ILI9341 驱动显示及仿真

stm32cubemx新建工程代码&#xff0c;并生成工程 设置gpio 设置SPI 其他的参考stm32默认设置 然后编辑驱动代码 ili9341.h #ifndef ILI9341_H #define ILI9341_H#include <stdbool.h> #include <stdint.h>#include "glcdfont.h" #include "stm32…

物联网Java项目, 2万多TPS如何处理?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「物联网Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;2W个采集点&#xff0…

React 18【实用教程】(2024最新版)

搭建开发环境 含配置&#xff0c;react-developer-tools 和 Redux DevTools 下载安装 https://blog.csdn.net/weixin_41192489/article/details/138523829 JSX 语法 https://blog.csdn.net/weixin_41192489/article/details/138649165 组件 父子组件传值、兄弟组件传值、越层组…