日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

有些C/C++項(xiàng)目開(kāi)發(fā)周期極長(zhǎng)。在處理此類(lèi)項(xiàng)目過(guò)程中,構(gòu)建開(kāi)發(fā)環(huán)境就像施展魔法一樣:測(cè)試框架被巧妙集成在一起,CI/CD流程將開(kāi)發(fā)者從繁瑣重復(fù)的工作中解脫出來(lái)。

作為程序員,在開(kāi)發(fā)過(guò)程中,我只有一個(gè)簡(jiǎn)單的愿望:在當(dāng)前的開(kāi)發(fā)環(huán)境中將C庫(kù)簡(jiǎn)化為少數(shù)幾個(gè)文件。

在本文中,我們將介紹如何為C語(yǔ)言項(xiàng)目構(gòu)建容器化開(kāi)發(fā)環(huán)境,也將介紹如何使用CMake設(shè)置構(gòu)建系統(tǒng)、使用Unity設(shè)置測(cè)試環(huán)境以及如何在CI流水線(xiàn)中構(gòu)建容器化環(huán)境。

一、現(xiàn)代化開(kāi)發(fā)環(huán)境

接下來(lái),我們將展示如何為C項(xiàng)目構(gòu)建完整的、容器化的開(kāi)發(fā)環(huán)境:

  • 創(chuàng)建Docker鏡像作為vscode的開(kāi)發(fā)容器;
  • 基于最小化的Dummy庫(kù),在容器中設(shè)置構(gòu)建庫(kù)的工具;
  • 設(shè)置靜態(tài)代碼分析器clang-tidy檢查代碼是否有常見(jiàn)錯(cuò)誤;
  • clang-format維持代碼庫(kù)的格式保持正常和整潔;
  • 設(shè)置Unity,通過(guò)在主機(jī)上執(zhí)行Ceedling測(cè)試虛擬函數(shù);
  • 最后,我們將設(shè)置Github工作流,使用本地Docker鏡像執(zhí)行、構(gòu)建測(cè)試項(xiàng)目。

在本文中,我將使用Docker命令行接口。如果你不明白為什么需要某些參數(shù),建議參考在線(xiàn)文檔。你也可以直接打開(kāi)GitHub上的示例項(xiàng)目。

二、在Docker中運(yùn)行程序 

有時(shí),使用嵌入式系統(tǒng)C/C++需要安裝大量專(zhuān)用工具編譯器。如果你正在同時(shí)處理不同的項(xiàng)目,版本之間很容易發(fā)生沖突。因此,我更傾向于在Docker容器中運(yùn)行所有程序。

你可以使用Dockerfiles,這能避免在本地安裝工具,任何人都能通過(guò)預(yù)構(gòu)建鏡像本地鏡像加入項(xiàng)目。

1.為什么是Docker?存在哪些陷阱?

如果你是Docker新手,需注意以下幾點(diǎn):

  • Dockerfiles不穩(wěn)定:昨天構(gòu)建出的Dockerfile今天就可能無(wú)法使用,存在太多的外部依賴(lài)關(guān)系;
  • Docker不是平臺(tái)獨(dú)立型的,例如Apple ARM;
  • 某些Docker特性?xún)H在linux或?qū)S脀indows中獲得了支持;例如,并非所有平臺(tái)都支持將USB設(shè)備安裝到Docker容器之中,這是自2016年以來(lái)的限制。

鑒于此,建議你不要將“賭注”“押”在同一項(xiàng)技術(shù)上,并且你需要隨時(shí)做好切換的準(zhǔn)備。

2.讓我們這樣做 

讓我們從零開(kāi)始,構(gòu)建空存儲(chǔ)庫(kù)

圖片

確保安裝Dockor并順利運(yùn)行,在項(xiàng)目的根目錄中創(chuàng)建如下內(nèi)容:builder.Dockerfile

圖片

這個(gè)Dockerifle指定了基本鏡像并安裝了一些包,便于在后續(xù)步驟中使用。我不會(huì)詳細(xì)介紹每一個(gè)軟件包:在創(chuàng)建鏡像時(shí),你很快就能注意到缺少了什么,可以擴(kuò)展軟件包列表,重要的是以下幾點(diǎn):

  • 對(duì)于基本圖像,我強(qiáng)烈建議使用特定標(biāo)簽。apt包在基本鏡像之間變化很大,選擇標(biāo)記可以為你節(jié)省更多時(shí)間;
  • 我傾向于在鏡像開(kāi)發(fā)過(guò)程中使用特定平臺(tái) ,這一點(diǎn)對(duì)后續(xù)開(kāi)發(fā)步驟的順利進(jìn)行很重要。

如果不使用vscode,也可以指定不同的鏡像。在本文中,我們將使用vscode,也將堅(jiān)持使用Dev容器所支持的鏡像。

鏡像是用如下的命令構(gòu)建出來(lái)的,執(zhí)行起來(lái)可能需要一點(diǎn)時(shí)間:

圖片

3.詳細(xì)命令行調(diào)用的快捷方式 

Docker命令非常冗長(zhǎng),因此,我通常將常用命令放在makefile項(xiàng)目根目錄中。假設(shè)安裝make后可進(jìn)行如下操作:

圖片

現(xiàn)在,執(zhí)行如下操作重建鏡像:

圖片

讓我們從圖像中旋轉(zhuǎn)容器并進(jìn)行測(cè)試:

圖片

當(dāng)使用apt時(shí),已安裝的工具版本取決于基礎(chǔ)鏡像,也取決于包注冊(cè)表。如果需要安裝特定的版本,可以通過(guò)執(zhí)行自定義的RUN命令。

三、Visual Studio代碼開(kāi)發(fā)容器 

沒(méi)有在本地安裝所有工具的缺點(diǎn)是:你選擇的IDE無(wú)法利用這些工具,例如,當(dāng)使用vscode時(shí),如果沒(méi)有安裝編譯器,你將無(wú)法正確設(shè)置智能提示或任何其它的輔助程序

vscode允許你在開(kāi)發(fā)容器中運(yùn)行編輯器。這也是我們選擇將mcr.microsoft.com/vscode/devcontAIners/base當(dāng)作基礎(chǔ)圖像的原因:我們可以在容器中鏈接到vscode,因此所有工具都將被安裝在Docker鏡像中。

值得注意的是,vscode實(shí)例與本地vscode安裝不匹配,與遠(yuǎn)程實(shí)例非常相似。

通過(guò)創(chuàng)建.devcontainer/devcontainer.json文件,我們可以讓vscode使用新構(gòu)建的圖像作為開(kāi)發(fā)容器,還可以在vscode實(shí)例中安裝3個(gè)擴(kuò)展,通過(guò)使用 customizations.extensions字段中的devcontainer.json配置文件:

圖片

如果你從現(xiàn)在開(kāi)始重新加載窗口或重新打開(kāi)vscode,vscode應(yīng)該會(huì)詢(xún)問(wèn)你是否需要使用檢測(cè)到的開(kāi)發(fā)容器。

圖片

需要一段時(shí)間為vscode設(shè)置你的容器安裝擴(kuò)展,并用vscode連接到Linux容器

圖片

四、系統(tǒng)架構(gòu) 

我們將使用CMake構(gòu)建單獨(dú)的.c和.h對(duì)。

圖片

圖片

CMakeLists.txt簡(jiǎn)單定義了名為“Dummy”的庫(kù),并將相應(yīng)的文件添加到庫(kù)中。

重要的是:這已在開(kāi)發(fā)容器和vscode中被構(gòu)建出來(lái)了!在你的遠(yuǎn)程實(shí)例中打開(kāi)集成終端并執(zhí)行CMake,如下所示:

圖片

五、安裝clang工具:格式化和靜態(tài)代碼分析

C和C++的靈活性也伴隨著大量“footguns”的出現(xiàn);因此,我嘗試在項(xiàng)目中添加至少一個(gè)最小的靜態(tài)代碼分析任務(wù),這有助于發(fā)現(xiàn)最明顯的錯(cuò)誤。市面上有很多工具,但到目前為止,我個(gè)人更偏愛(ài)clang-tidy。

另外,在代碼庫(kù)上進(jìn)行協(xié)作時(shí),格式化器極好;當(dāng)我們?cè)诎惭bclang-tidy時(shí),不妨繼續(xù)安裝clang-format。

你需要將兩個(gè)配置文件clang-format和.clang-tidy放置到項(xiàng)目根目錄中,以便任何IDE都能自動(dòng)拾取它們:

圖片

六、添加單元測(cè)試框架

我們已經(jīng)能夠構(gòu)建并分析庫(kù),還提供了格式化功能。在開(kāi)發(fā)環(huán)境中,我們還需要一個(gè)單元測(cè)試框架

在本文中,我選擇了Unity測(cè)試框架,通過(guò)Ceedling在主機(jī)上執(zhí)行。順便說(shuō)一句,使用這個(gè)框架便于嵌入式系統(tǒng)在目標(biāo)硬件上執(zhí)行任務(wù)。

1.安裝Unity和Ceedling 

在構(gòu)建者鏡像的第一步中,我們已經(jīng)安裝了ruby,所以,安裝單元測(cè)試工具變得更加簡(jiǎn)單:

圖片

重建鏡像后,我們就可以開(kāi)始了!

圖片

 

2.配置Unity和運(yùn)行單元測(cè)試 

簡(jiǎn)而言之,你需要在一個(gè)專(zhuān)門(mén)的unity_config.h文件中將配置開(kāi)關(guān)設(shè)置為Unity并配置Ceedling與project.yml. Ceedling,為你生成所有的測(cè)試運(yùn)行程序。

你需要做的就是添加你的測(cè)試文件,然后“告訴”Ceedling如何檢測(cè)它們:

圖片

然后,我們可以創(chuàng)建第一個(gè)單元測(cè)試tests/unittest/test/test_dummy.c:

圖片

七、結(jié)論

到這里,所有的工作就都完成了,包括庫(kù)的構(gòu)建等,報(bào)告也可以使用了。神奇的是,所有這些操作都不會(huì)使計(jì)算機(jī)因工具而“堵塞”

圖片

最后,值得一提的是:有了Docker桌面,你不僅可以輕松檢查圖像漏洞,還能檢查Dockerfile中的每一步:

圖片

現(xiàn)在,你已具備在GitHub上用CI設(shè)置容器化C/C++項(xiàng)目的所有技能。有了這項(xiàng)技能,你能輕松地在文檔中添加特定編譯器清理設(shè)置CI時(shí)出現(xiàn)的所有錯(cuò)誤

分享到:
標(biāo)簽:語(yǔ)言
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定