当前位置: 首页 > news >正文

Cmake输出git内容方式

实现背景

在定位问题时,固件无法获取当前设备中版本的详细信息,无法准确获取版本具体内容

输出效果

实现方式

以下是基于Cmake的语法实现
在CMake中获取git信息,可以通过execute_process命令运行git命令并将结果保存在一个变量中。然后可以使用configure_file命令将此信息写入一个头文件,最后在main函数中包含此头文件并打印相关信息。

  1. 在CMakeLists.txt文件中,使用execute_process命令运行git命令获取git版本信息,如commit hash和commit日期。例如,可以使用以下命令获取最新的commit hash和日期:
   find_package(Git)if(GIT_FOUND)execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%HWORKING_DIRECTORY ${CMAKE_SOURCE_DIR}OUTPUT_VARIABLE GIT_COMMIT_HASHOUTPUT_STRIP_TRAILING_WHITESPACE)execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%cd --date=shortWORKING_DIRECTORY ${CMAKE_SOURCE_DIR}OUTPUT_VARIABLE GIT_COMMIT_DATEOUTPUT_STRIP_TRAILING_WHITESPACE)endif()
  1. 使用configure_file命令将git版本信息写入一个头文件。例如,可以创建一个名为version.h的头文件,并在其中定义一些宏来保存git版本信息:
  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in${CMAKE_CURRENT_BINARY_DIR}/version.h)
  1. 在version.h.in文件中,定义一些宏来保存git版本信息。例如:
   #define GIT_COMMIT_HASH "@GIT_COMMIT_HASH@"#define GIT_COMMIT_DATE "@GIT_COMMIT_DATE@"
  1. 在main函数中,包含version.h文件,并打印git版本信息。例如:
   #include "version.h"#include <stdio.h>int main() {printf("Commit hash: %s\n", GIT_COMMIT_HASH);printf("Commit date: %s\n", GIT_COMMIT_DATE);return 0;}

说明

version.h.in 文件是需要手动创建来作为模板,cmake编译的时候回自动生成文件version.h文件,将数据保存到这个变量中,编译出来的固件就会有这些编译出来文件的符号和内容

参考内容

http://www.lryc.cn/news/204432.html

相关文章:

  • 实现多余内容变成省略号
  • WAL 模式(PostgreSQL 14 Internals翻译版)
  • 2023年信息科学与工程学院学生科协第二次软件培训
  • 渗透测试tomcat错误信息泄露解决办法
  • notes_NLP
  • 内存分段、分页
  • Python-pptx教程之一从零开始生成PPT文件
  • k8s 使用ingress-nginx访问集群内部应用
  • 企业数据泄露怎么办?
  • GoLong的学习之路(一)语法之变量与常量
  • Go-Python-Java-C-LeetCode高分解法-第十一周合集
  • 封装axios的两种方式
  • 【自然语言处理】NLTK库的概念和作用
  • Python爬虫如何解决提交参数js加密
  • 云数据库及RDS数据库介绍
  • c语言进阶部分详解(详细解析自定义类型——枚举,联合(共用体))
  • 使用 Requests 库和 PHP 的下载
  • ConcurrentHashMap底层具体实现知道吗?实现原理是什么
  • Go语言“Go语言:掌握未来编程的利器“
  • 达梦管理工具报错“结果集不可更新,请确认查询列是否出自同一张表,并且包含值唯一的列。”
  • TensorFlow2从磁盘读取图片数据集的示例(tf.keras.utils.image_dataset_from_directory)
  • Unity开发过程中的一些小知识点
  • 大语言模型(LLM)综述(一):大语言模型介绍
  • 在Ubuntu上安装和挂载NFS
  • Python 实现的简易数据库管理系统 (DBMS)
  • 1.初识MySQL
  • 【列存储学习总结】
  • 小记java正则表达式中matcher.find() 和 matcher.matches() 的区别
  • 当中国走进全球化的“深水区”,亚马逊云科技解码云时代的中国式跃升
  • 零基础Linux_21(多线程)页表详解+轻量级进程+pthread_create