一、軟件管理
稍微上點(diǎn)規(guī)模的軟件開發(fā)往往周期都非常長(zhǎng),中間會(huì)產(chǎn)生很多臨時(shí)版本,這些臨時(shí)版本往往會(huì)有各種各樣的bug,由于項(xiàng)目參與的人員眾多、水平參差不齊,軟件分支眾多、功能復(fù)雜,經(jīng)常會(huì)有各種稀奇古怪的事情發(fā)生,
經(jīng)常遇到一個(gè)問題就是:某個(gè)測(cè)試版本測(cè)出了問題,但是研發(fā)卻發(fā)現(xiàn)服務(wù)器中沒有對(duì)應(yīng)的版本與之對(duì)應(yīng)。
有的公司要求所有bug必須有始有終,一旦bug無法復(fù)現(xiàn),這時(shí)候測(cè)試和開發(fā)免不了一陣扯皮,這影響到績(jī)效?。。。?/p>
所以版本管理非常重要。
現(xiàn)在大多數(shù)公司軟件都是采用git管理,對(duì)于嵌入式軟件,廠家提供的sdk,往往都有g(shù)it本地倉庫,嵌入式軟件一般規(guī)模都不大,所以公司對(duì)軟件版本管理往往并不會(huì)太嚴(yán)格,很多嵌入式軟件工程師都沒能養(yǎng)成良好的軟件管理習(xí)慣。
本文主要講解如何在編譯的時(shí)候就給軟件自動(dòng)添加更新軟件版本的功能,程序運(yùn)行的開始就將版本打印出來,配合git,更方便的定位軟件版本問題。
二、軟件版本號(hào)
公司的軟件版本號(hào)往往都比較復(fù)雜,本文為便于讀者理解,將版本號(hào)的定義精簡(jiǎn)如下:
僅僅打印版本發(fā)布的時(shí)間,
后續(xù)彭老師會(huì)單獨(dú)再寫一篇,一個(gè)比較經(jīng)典的版本號(hào)管理實(shí)例文章,有興趣的老鐵可以關(guān)注下彭老師的公眾號(hào)。
三、原理
我們可以定義一個(gè)頭文件sw_version.h專門存放版本信息的宏,
#define?SW_VERSION?“2024-09-09-7”
主程序包含該頭文件,并在程序運(yùn)行的開頭位置,打印改宏。
編譯 過程中,編譯腳本mk.sh自動(dòng)將當(dāng)前時(shí)間等信息更新到頭文件sw_version.h
這樣我們編譯出的可執(zhí)行程序app就自帶了最新的版本信息。
更新頭文件sw_version.h中的內(nèi)容,我們可以字節(jié)編寫c程序修改,也可以直接使用命令date,本文通過后者來講解。
四、命令date
date選項(xiàng)
date 能用來顯示或設(shè)定系統(tǒng)的日期和時(shí)間:
- 常見選項(xiàng)
--help:顯示輔助信息
--version:顯示date命令版本信息
-u:顯示目前的格林威治時(shí)間
-d:做日期時(shí)間相關(guān)的運(yùn)算
-?-?date?=?'dateStr'?:做時(shí)間的相關(guān)運(yùn)算
本文主要用到顯示日期和時(shí)間的功能:
- 1) ?顯示系統(tǒng)當(dāng)前日期時(shí)間
[root@hadoop?~]#?date
- 2) ?以指定格式顯示日期時(shí)間
[root@hadoop?~]#?date?'+%Y-%m-%d?%H:%M:%S'
執(zhí)行結(jié)果:
date格式標(biāo)記日期、時(shí)間
date 能用來顯示或設(shè)定系統(tǒng)的日期和時(shí)間,在顯示方面,使用者能設(shè)定欲顯示的格式,格式設(shè)定為一個(gè)加號(hào)后接數(shù)個(gè)標(biāo)記
日期方面:
%a?:?星期幾?(Sun..Sat)
%A?:?星期幾?(Sunday..Saturday)
%b?:?月份?(Jan..Dec)
%B?:?月份?(January..December)
%c?:?直接顯示日期和時(shí)間
%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?:?年份的最后兩位數(shù)字?(00.99)
%Y?:?完整年份?(0000..9999)
時(shí)間方面:
%%:?打印出%
%n?:?下一行
%t?:?跳格
%H?:?小時(shí)(00..23)
%k?:?小時(shí)(0..23)
%l?:?小時(shí)(1..12)
%M?:?分鐘(00..59)
%p?:?顯示本地AM或PM
%P?:?顯示本地am或pm
%r?:?直接顯示時(shí)間(12?小時(shí)制,格式為?hh:mm:ss?[AP]M)
%s?:?從?1970?年?1?月?1?日?00:00:00?UTC?到目前為止的秒數(shù)
%S?:?秒(00..61)
%T?:?直接顯示時(shí)間(24小時(shí)制)
%X?:?相當(dāng)于%H:%M:%S?%p
%Z?:?顯示時(shí)區(qū)
若是不以加號(hào)作為開頭,則表示要設(shè)定時(shí)間,而時(shí)間格式為
?MMDDhhmm[[CC]YY][.ss]
MM?為月份,
DD?為日,
hh?為小時(shí),
mm?為分鐘,
CC?為年份前兩位數(shù)字,
YY?為年份后兩位數(shù)字,
ss?為秒數(shù)
五、腳本實(shí)例
腳本實(shí)例:
??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行:定義環(huán)境變量str_front,用于保存字符串?`#define?SW_VERSION?`?
* 4行:定義環(huán)境變量quotation,保存字符`"`
* 5行:定義環(huán)境變量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**
??????>>?表示重定向,信息覆蓋?
執(zhí)行結(jié)果
大家可以根據(jù)自己需要,自己定制自己需要的版本號(hào)格式,
同時(shí)也可以把該腳本嵌入到自己的編譯腳本中。