• 正文
    • 一、軟件管理
    • 二、軟件版本號(hào)
    • 三、原理
    • 四、命令date
    • 五、腳本實(shí)例
  • 推薦器件
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

讓你的C程序,自動(dòng)打印版本信息

2024/08/13
1151
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

一、軟件管理

稍微上點(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í)間的功能:

[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í)也可以把該腳本嵌入到自己的編譯腳本中。

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
PVG612ASPBF 1 International Rectifier Transistor Output SSR, 1-Channel, 4000V Isolation, LEAD FREE, SURFACE MOUNT, DIP-6
$14.25 查看
TLP187(TPL,E(T 1 Toshiba America Electronic Components 1 CHANNEL DARLINGTON OUTPUT OPTOCOUPLER
$1.25 查看
LTC6991IS6#TRMPBF 1 Linear Technology LTC6991 - TimerBlox: Resettable, Low Frequency Oscillator; Package: SOT; Pins: 6; Temperature Range: -40°C to 85°C
$2.51 查看

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

公眾號(hào)『一口Linux』號(hào)主彭老師,擁有15年嵌入式開發(fā)經(jīng)驗(yàn)和培訓(xùn)經(jīng)驗(yàn)。曾任職ZTE,某研究所,華清遠(yuǎn)見教學(xué)總監(jiān)。擁有多篇網(wǎng)絡(luò)協(xié)議相關(guān)專利和軟件著作。精通計(jì)算機(jī)網(wǎng)絡(luò)、Linux系統(tǒng)編程、ARM、Linux驅(qū)動(dòng)、龍芯、物聯(lián)網(wǎng)。原創(chuàng)內(nèi)容基本從實(shí)際項(xiàng)目出發(fā),保持原理+實(shí)踐風(fēng)格,適合Linux驅(qū)動(dòng)新手入門和技術(shù)進(jìn)階。