首页 > 编程语言 >让你的C程序,可以自动更新版本信息

让你的C程序,可以自动更新版本信息

时间:2024-08-17 11:18:56浏览次数:8  
标签:00 .. sw 程序 显示 version 自动更新 date 版本信息

一、软件管理

稍微上点规模的软件开发往往周期都非常长,

中间会产生很多临时版本,

这些临时版本往往会有各种各样的bug,

由于项目参与的人员众多、水平参差不齐,

软件分支众多、功能复杂,

经常会有各种稀奇古怪的事情发生,

经常遇到一个问题就是:
某个测试版本测出了问题,
但是研发却发现服务器中没有对应的版本与之对应。

有的公司要求所有bug必须有始有终,

一旦bug无法复现,

这时候测试和开发免不了一阵扯皮,

这影响到绩效啊!!!

所以版本管理非常重要。

现在大多数公司软件都是采用git管理,

对于嵌入式软件,

厂家提供的sdk,往往都有git本地仓库,

嵌入式软件一般规模都不大,

所以公司对软件版本管理往往并不会太严格,

很多嵌入式软件工程师都没能养成良好的软件管理习惯。

本文主要讲解如何在编译的时候就给软件自动添加更新软件版本的功能,

程序运行的开始就将版本打印出来,

配合git,更方便的定位软件版本问题。

二、软件版本号

公司的软件版本号往往都比较复杂,

本文为便于读者理解,将版本号的定义精简如下:

仅仅打印版本发布的时间,

后续彭老师会单独在写一篇,一个比较经典的版本号管理实例文章,有兴趣的老铁可以关注下彭老师的号。

三、原理

我们可以定义一个头文件sw_version.h专门存放版本信息的宏,

#define SW_VERSION “2024-09-09-7”

主程序包含该头文件,

并在程序运行的开头位置,打印改宏。

编译 过程中,编译脚本mk.sh自动将当前时间等信息更新到头文件sw_version.h

这样我们编译出的可执行程序app就自带了最新的版本信息。

更新头文件sw_version.h中的内容,我们可以字节编写c程序修改,也可以直接使用命令date,

本文通过后者来讲解。

四、命令date

date选项

date 能用来显示或设定系统的日期和时间:

  • 常见选项
--help:显示辅助信息
--version:显示date命令版本信息
-u:显示目前的格林威治时间
-d:做日期时间相关的运算
- - date = 'dateStr' :做时间的相关运算

本文主要用到显示日期和时间的功能:

  • 1) 显示系统当前日期时间
[root@hadoop ~]# date
  • 2) 以指定格式显示日期时间
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S'

执行结果:

date格式标记日期、时间

date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记

日期方面:

%a : 星期几 (Sun..Sat)

%A : 星期几 (Sunday..Saturday)

%b : 月份 (Jan..Dec)

%B : 月份 (January..December)

%c : 直接显示日期和时间

%d : 日 (01..31)

%D : 直接显示日期 (mm/dd/yy)

%h : 同 %b

%j : 一年中的第几天 (001..366)

%m : 月份 (01..12)

%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)

%w : 一周中的第几天 (0..6)

%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)

%x : 直接显示日期 (mm/dd/yyyy)

%y : 年份的最后两位数字 (00.99)

%Y : 完整年份 (0000..9999)

时间方面:

%%: 打印出%

%n : 下一行

%t : 跳格

%H : 小时(00..23)

%k : 小时(0..23)

%l : 小时(1..12)

%M : 分钟(00..59)

%p : 显示本地AM或PM

%P : 显示本地am或pm

%r : 直接显示时间(12 小时制,格式为 hh:mm:ss [AP]M)

%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数

%S : 秒(00..61)

%T : 直接显示时间(24小时制)

%X : 相当于%H:%M:%S %p

%Z : 显示时区

若是不以加号作为开头,则表示要设定时间,而时间格式为

 MMDDhhmm[[CC]YY][.ss]
MM 为月份,

DD 为日,

hh 为小时,

mm 为分钟,

CC 为年份前两位数字,

YY 为年份后两位数字,

ss 为秒数

五、脚本实例

脚本实例:

  1 #!/bin/bash
  2 
  3 str_front=#define SW_VERSION
  4 quotation="\""
  5 version_file=sw_version.h
  6 
  7 rm $version_file
  8 echo $str_front $quotation$(date '+%Y-%m-%d-%H')$quotation >> $version_file 
* 3行:定义环境变量str_front,用于保存字符串 `#define SW_VERSION ` 
* 4行:定义环境变量quotation,保存字符`"`
* 5行:定义环境变量version_file,保存头文件**sw_version.h**名字
* 7行:删除头文件**sw_version.h**
* 8行:更新最新版本信息到头文件**sw_version.h**
      借助date命令拼接成下面字符串
		#define SW_VERSION “2024-09-09-7”
	  将该字符串信息,通过echo命令重定向到头文件**sw_version.h**
      >> 表示重定向,信息覆盖 

执行结果


大家可以根据自己需要,自己定制自己需要的版本号格式,

同时也可以把该脚本嵌入到自己的编译脚本中。

参考:

https://blog.csdn.net/qq_42246689/article/details/83621262?spm=1001.2014.3001.5506

标签:00,..,sw,程序,显示,version,自动更新,date,版本信息
From: https://www.cnblogs.com/yikoulinux/p/18364153

相关文章

  • Linux c程序中获取shell脚本输出(如获取system命令输出)
    在工作中遇到一个小问题,就是想获取函数system()执行之后打印的字符串信息。这个功能还是很实用的,能为我们节省很多开发时间,特地整理了一下相关知识点分享给大家。1.使用临时文件1.1使用shell的重定向首先想到的方法就是将命令输出重定向到一个临时文件,在我们的应用程序中读......
  • Linux下如何在程序中获取某个命令执行的结果?【附源码】
    在工作中遇到一个问题,就是想获取某个函数执行之后打印的字符串信息。这个功能应用场景挺多的,特地整理了一下相关知识点分享给大家。1.使用临时文件1)使用shell的重定向将命令输出重定向到一个临时文件,在我们的应用程序中读取这个临时文件,获得外部命令执行结果,代码如下所示:/......
  • 大厂程序员失业 8 个月后的真实写照
    董宇辉曾经说过这样一段话:你可能会一个人走一段黑夜,但是后来,别人问你的时候,你就说,“那天都是漫天星光和一路歌唱”,你不是刻意地在美化人生,你只是提醒自己,不要沉沦在逆境里。对于一个前大厂程序员来说,工作中最大的逆境是什么呢?绩效被打C,还是遭遇裁员?这些都是小巫见大巫了。一......
  • 【python学习】Asyncio库的真正力量:如何用Python编写高效并发程序
    目标读者群体及文章解决的问题这篇文章适合对Python编程有一定了解的开发者,尤其是希望深入理解并掌握异步编程的读者。通过对asyncio库的全面解析,我们将结合2023年环法冠军温格高的夺冠故事,帮助你掌握如何在Python中使用异步编程处理复杂的并发任务,避免常见的错误,并提高代......
  • C程序设计——基本变量类型(指针杂谈)
    瞎聊本文后面的内容,可以暂时看不懂,以后如果从事这一行,慢慢会理解,但是这句话要记住:如果 piInt是一个指向整型的指针变量,那么 *piInt就是一个整型变量;类似的,如果pcChar是一个指向字符型的指针变量,那么*pcChar就是一个字符型的变量;……其实这部分内容,也许放在 C程序设计......
  • easy-es:java: 程序包org.dromara.easyes.core.core不存在
    问题描述:运行easy-es官网的springboot集成demo时报错:java:程序包org.dromara.easyes.core.core不存在问题分析:Ctrl+鼠标左键进入org.dromara.easyes.core下,查找发现BaseEsMapper在org.dromara.easyes.core.kernel目录下,而非org.dromara.easyes.core.core下解决方法......
  • 集师知识付费小程序搭建
       在这个月,张校长依托知识付费小程序,巧妙融合了线上活动与线下实践,成功实现了十万元的收入。小程序内,我精心策划了一系列高质量的课程与直播讲座,涵盖热门领域与专业技能,吸引了大量求知若渴的学员。通过线上互动问答、社群讨论,不仅增强了学习氛围,还促进了知识的深度交流与......
  • 基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
    目录1.算法运行效果图预览2.算法运行软件版本3.部分程序4.算法理论概述5.算法完整程序工程1.算法运行效果图预览(完整程序运行后无水印)将FPGA的仿真结果导入到MATLAB中,分别得到MATLAB的结果和FPGA的结果:2.算法运行软件版本vivado2019.2matlab2022a3.部分程序......
  • centos(linux): rpm -V 验证rpm包安装程序的安全
    一,作用rpm-Va:校验所有的RPM软件包,通常用来检查系统文件是否被植入后门或rootkit二,例子#-V:校验软件包,此校验功能可以用来确认文件是否被修改或覆盖#-a: RPM校验系统中所有已安装的软件包[root@blog~]#rpm-Va>rpmva.txt返回结果:[root@blog~]#morerpmva.tx......
  • 基于flask+vue框架的的校园后台报修管理系统设计与实现[开题+论文+程序]-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着校园信息化建设的不断深入,各类基础设施的维护与保养成为保障教学、科研及师生生活顺利进行的重要环节。然而,传统的报修方式往往依赖于......