基于cmake为项目自动获取git分支tag的版本号和commitid

news2024/9/28 9:22:23

目录

  • 1. 引言
  • 2. 实现过程
    • 2.1 工程目录规划
    • 2.2 c程序文件
    • 2.3 CMakeLists.txt
    • 2.4 GitVersion.cmake文件
    • 2.5 BuildNumber.cmake文件

1. 引言

  在项目构建的时候,我们经常会希望能够将git提交的分支信息和提交号(commitid)以及当前版本发布的tag信息作为版本号自动构建到程序里面,以便后续能够快速定位所运行的程序所定影的git源码的版本,从而快速发现和定位问题。
  本文利用cmake的自动构建能力,来实现以下信息的自动提取并构建到程序中:

  • 当前代码的git 分支名
  • 当前代码的git 提交号(commitid)
  • 当前代码的tag所设置的版本号
  • 当前代码的构建时间
  • 当前代码的构建号(buildno)

  以下以c语言构成为例,展示了利用cmake自动生成config.h文件,将以上信息自动集成到c语言工程代码中的过程。

2. 实现过程

2.1 工程目录规划

  如下图:
在这里插入图片描述|300

  其中有c语言源码都放在工程根目录下面,当然,对于比较大型的工程,可以对源码目录进行更细地拆分和规划,本demo只有一个test.c和config.h的c源码文件,因此源码目录从简。
  创建一个cmake目录,用来存放自定义的cmake模块文件。
  创建一个build目录,用来存放cmake运行所产生的输出文件。

2.2 c程序文件

  test.c 文件的内容如下:

#include <stdio.h>
#include "config.h"

int main()
{
   
	printf("version: %s\n", PROJECT_VERSION);
	printf("commit:  %s\n", GIT_COMMITID);
	printf("branch:  %s\n", GIT_BRANCH)

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

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

相关文章

[C++]: 模板进阶

标题&#xff1a;[C]&#xff1a; 模板进阶 水墨不写bug 目录 一、非类型模板参数 &#xff08;1&#xff09;、非类型模板参数简介 &#xff08;2&#xff09;、非类型模板参数实例 二、模板的特化 &#xff08;1&#xff09;函数模板特化 &#xff08;2&#xff09;类…

微信文件太大传不了?学会这些,微信秒变大文件传输神器

在数字化时代&#xff0c;微信已成为我们日常沟通的重要桥梁。然而&#xff0c;当需要在微信上传输大文件时&#xff0c;文件大小的限制往往让人束手无策。 今天&#xff0c;我们将分享一些实用的技巧&#xff0c;帮助你在微信上轻松传输大文件&#xff0c;无论是工作文档还是…

防火墙组网

一、实验拓扑图 二、实验要求 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00-18&#xff1a;00&#xff09;可以访问&#xff0c; 生产区的设备全天可以访问。 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网。 3、办…

无人机之飞行规划与管理篇

无人机飞行规划与管理是确保无人机安全、高效且符合法规的运行的关键步骤。这一过程包括了对飞行任务的详细安排、航线的设定以及风险的评估和管理。下面简述这一过程的主要环节&#xff1a; 一、飞行目的和任务确定 在规划之初&#xff0c;必须明确无人机的飞行目的&#xf…

ES13的4个改革性新特性

1、类字段声明 在 ES13 之前,类字段只能在构造函数中声明, ES13 消除了这个限制 // 之前 class Car {constructor() {this.color = blue;this.age = 2

表格数据存本地,实时保存

需求&#xff1a;填写表格时&#xff0c;每填写一个就要保存 将表格数据以json对象的格式存在本地&#xff0c;刷新时在created或者mounted将数据取出&#xff0c;点击保存时将存的数据清除&#xff0c;但是如果不点击保存&#xff0c;直接填写下一个数据&#xff0c;之前填写…

【java算法专场】双指针(下)

611. 有效三角形的个数 目录 611. 有效三角形的个数 算法思路 算法代码 LCR 179. 查找总价格为目标值的两个商品 算法思路 算法代码 HashSet 双指针 15. 三数之和 算法思路 算法代码 18. 四数之和 ​编辑算法思路 算法代码 611. 有效三角形的个数 算法思路 算法…

echarts无法加载Map地图的问题

项目场景&#xff1a; echarts无法加载Map地图的问题 详情 查阅相关资料讲&#xff0c;echarts4.9以上版本已经移除了map&#xff0c;那么我们就得重新打包echarts文件了。打包echarts.min.js的链接&#xff1a;https://echarts.apache.org/zh/builder.html 在这个链接页面可…

CTFShow的36D杯

神光 还是想了一下&#xff0c;但那个异或搞不出来&#xff0c;都是对dword_41A038操作&#xff0c;想起开头就给了 key &#xff0c;还有反调试应该是要调试的 输出的应该就是 flag &#xff0c;只是为什么是乱码呢&#xff1f; 放 od 再试试&#xff0c;直接就出 flag 了&am…

对比:9款最佳个人项目管理软件盘点

文章介绍了9款个人项目管理软件&#xff1a;PingCode、Worktile、Flowus、Todoist、Trello、Teambition、有道云笔记、Notion、Microsoft To Do。 在管理个人项目时&#xff0c;是否常感到信息零散、进度难以把控&#xff1f;选择合适的项目管理软件&#xff0c;可以有效解决这…

关于解决双屏幕鼠标移动方向问题

1.点开设置》系统》屏幕 2.分清屏幕标识&#xff0c;一般笔记本为1 3.点击要移动的屏幕&#xff0c;然后按住鼠标左键不方进行移动 感谢您的浏览&#xff0c;希望可以帮到您&#xff01;

【探索Linux】P.38(传输层 —— TCP协议通信连接管理机制简介 | TCP连接状态转换)

阅读导航 引言一、TCP协议通信连接管理机制二、连接状态转换1. TCP状态转换图2. 状态转换过程3. 理解TIME_WAIT状态&#xff08;1&#xff09;目的和作用&#xff08;2&#xff09;状态转换&#xff08;3&#xff09;特殊情况&#xff08;4&#xff09;影响和优化 4. 理解 CLOS…

医疗器械的售后与服务探讨

彩虹医械维修培训 8月长期班报名啦 学技术 考证书 技术支持 大型医疗设备的宕机不仅会造成医疗机构直接的巨额经济损失&#xff0c;宕机期间的损失甚至可以超过维修费用&#xff0c;而且还可能会耽误患者的病情检查&#xff0c;因此对医疗设备的定期保养已经成为各级医院的…

学生选课管理系统(Java+MySQL)

技术栈 Java: 用于实现系统的核心业务逻辑。MySQL: 作为关系型数据库&#xff0c;用于存储系统中的数据。JDBC: 用于Java程序与MySQL数据库之间的连接和交互。Swing GUI: 用于创建图形用户界面&#xff0c;提升用户体验。 系统功能 我们的学生选课管理系统主要针对学生和管理…

SQL中on和where的区别

SQL中on和where的区别   前言&#xff0c;在工作写SQL使用中&#xff0c;在涉及到多个表的关联时&#xff0c;既可以通过on进行数据过滤&#xff0c;又可以使用where进行数据过滤&#xff0c; 确实有点不太了解这两个关键字在left join后的区别&#xff0c;所以就去查了些资…

从产业链视角审视工作

从产业链视角审视工作&#xff1a;定位、价值与成长 作为一名技术博客博主&#xff0c;我经常收到各种关于职业发展、技术成长和学习路径的问题。最近&#xff0c;我看了一份学习报告&#xff0c;其中提到了一种非常有趣且实用的视角——从产业链的角度去审视自己的工作。这种视…

【实战指南】揭秘Pandas:从零开始掌握数据处理与分析的超级工具箱

目录 Series 创建 Series 访问数据 DataFrame 创建 DataFrame 读取 CSV 文件 写入 CSV 文件 基本操作 查看前几行: 查看后几行: 描述性统计: 选择列: 选择行: 条件筛选: 排序: 合并数据: Pandas 是一个强大的 Python 库&#xff0c;主要用于数据分析和数据处理…

【INTEL(ALTERA)】为什么我使用 PIO 边缘捕获中断的 Nios® II 设计不能正常工作?

目录 说明 解决方法 说明 当用户选择了不正确的边缘捕获设置&#xff0c;从而阻止触发中断时&#xff0c;可能会出现此问题。 在 PIO&#xff08;并行 I/O&#xff09;英特尔 FPGA IP内核中&#xff0c;如果“启用单个位设置/清除”选项被关闭&#xff0c;则将任何值写入边…

智驭未来:人工智能与目标检测的深度交融

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;如同一股不可阻挡的浪潮&#xff0c;正以前所未有的速度重塑着我们的世界。在众多AI应用领域中&#xff0c;目标检测以其独特的魅力和广泛的应用前景&#xff0c;成为了连接现实与智能世界的桥梁。本文旨在…

精讲:java之多维数组的使用

一、多维数组简介 1.为什么需要二维数组 我们看下面这个例子&#xff1f;“ 某公司2022年全年各个月份的销售额进行登记。按月份存储&#xff0c;可以使用一维数组。如果改写为按季度为单位存储怎么办呢&#xff1f; 或许现在学习了一维数组的你只能申请四个一维数组去存储每…