加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 一、軟件管理
    • 二、軟件版本號
    • 三、原理
    • 四、命令date
    • 五、腳本實例
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

讓你的C程序,自動打印版本信息

08/13 10:00
1087
閱讀需 8 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

一、軟件管理

稍微上點規(guī)模的軟件開發(fā)往往周期都非常長,中間會產(chǎn)生很多臨時版本,這些臨時版本往往會有各種各樣的bug,由于項目參與的人員眾多、水平參差不齊,軟件分支眾多、功能復雜,經(jīng)常會有各種稀奇古怪的事情發(fā)生,

經(jīng)常遇到一個問題就是:某個測試版本測出了問題,但是研發(fā)卻發(fā)現(xiàn)服務器中沒有對應的版本與之對應。

有的公司要求所有bug必須有始有終,一旦bug無法復現(xiàn),這時候測試和開發(fā)免不了一陣扯皮,這影響到績效?。。?!

所以版本管理非常重要。

現(xiàn)在大多數(shù)公司軟件都是采用git管理,對于嵌入式軟件,廠家提供的sdk,往往都有g(shù)it本地倉庫,嵌入式軟件一般規(guī)模都不大,所以公司對軟件版本管理往往并不會太嚴格,很多嵌入式軟件工程師都沒能養(yǎng)成良好的軟件管理習慣。

本文主要講解如何在編譯的時候就給軟件自動添加更新軟件版本的功能,程序運行的開始就將版本打印出來,配合git,更方便的定位軟件版本問題。

二、軟件版本號

公司的軟件版本號往往都比較復雜,本文為便于讀者理解,將版本號的定義精簡如下:

僅僅打印版本發(fā)布的時間,

后續(xù)彭老師會單獨再寫一篇,一個比較經(jīng)典的版本號管理實例文章,有興趣的老鐵可以關(guān)注下彭老師的公眾號。

三、原理

我們可以定義一個頭文件sw_version.h專門存放版本信息的宏,

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

主程序包含該頭文件,并在程序運行的開頭位置,打印改宏。

編譯 過程中,編譯腳本mk.sh自動將當前時間等信息更新到頭文件sw_version.h

這樣我們編譯出的可執(zhí)行程序app就自帶了最新的版本信息。

更新頭文件sw_version.h中的內(nèi)容,我們可以字節(jié)編寫c程序修改,也可以直接使用命令date,本文通過后者來講解。

四、命令date

date選項

date 能用來顯示或設定系統(tǒng)的日期和時間:

    常見選項
--help:顯示輔助信息
--version:顯示date命令版本信息
-u:顯示目前的格林威治時間
-d:做日期時間相關(guān)的運算
-?-?date?=?'dateStr'?:做時間的相關(guān)運算

本文主要用到顯示日期和時間的功能:

[root@hadoop?~]#?date
    2) ?以指定格式顯示日期時間
[root@hadoop?~]#?date?'+%Y-%m-%d?%H:%M:%S'

執(zhí)行結(jié)果:

date格式標記日期、時間

date 能用來顯示或設定系統(tǒng)的日期和時間,在顯示方面,使用者能設定欲顯示的格式,格式設定為一個加號后接數(shù)個標記

日期方面:
%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?:?年份的最后兩位數(shù)字?(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?到目前為止的秒數(shù)

%S?:?秒(00..61)

%T?:?直接顯示時間(24小時制)

%X?:?相當于%H:%M:%S?%p

%Z?:?顯示時區(qū)

若是不以加號作為開頭,則表示要設定時間,而時間格式為

?MMDDhhmm[[CC]YY][.ss]
MM?為月份,

DD?為日,

hh?為小時,

mm?為分鐘,

CC?為年份前兩位數(shù)字,

YY?為年份后兩位數(shù)字,

ss?為秒數(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ù)自己需要,自己定制自己需要的版本號格式,

同時也可以把該腳本嵌入到自己的編譯腳本中。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
BCM89811B1AWMLG 1 Broadcom Limited Ethernet Transceiver, PACKAGE-36
$13.11 查看
LAN8742AI-CZ 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER

ECAD模型

下載ECAD模型
$2.57 查看
SN74LVC1G14DBVR 1 Rochester Electronics LLC Inverter,
$0.14 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

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