歐科云鏈研究院:全球監(jiān)管變局將如何塑造Web3的未來?2025 福布斯中國人工智能科技企業(yè) TOP 50 評選正式啟動現(xiàn)代汽車首次任命外籍CEO 現(xiàn)任CEO兼總裁將升任集團(tuán)副會長省時省電省空間!卡薩帝熱水器全球首創(chuàng)星閃感知方案智能體時代到來,高品質(zhì)數(shù)字人引領(lǐng)營銷增長新趨勢傳承德國工匠精神,德國寶憑品質(zhì)實(shí)力出道傳承德國工匠精神,德國寶憑品質(zhì)實(shí)力出道Canalys:2024年第三季度拉美智能手機(jī)市場增長10%華為余承東廣州車展透露Mate 70即將發(fā)布,擔(dān)心新機(jī)遭偷拍馬斯克指控OpenAI壟斷生成式AI市場,忽視安全問題特斯拉電動皮卡Cybertruck交付還不滿一年 但已有6次召回寧德時代攜手上海交大布局機(jī)器人領(lǐng)域,自研人形及四足機(jī)器人助力工廠智能化上市6年,“小破站”終于賺錢了車頂終端衛(wèi)星上網(wǎng) 199 元 / 天,中國衛(wèi)通推出衛(wèi)星互聯(lián)網(wǎng)產(chǎn)品套餐韓國副總理:人工智能將被指定為國家戰(zhàn)略技術(shù)雙11跨境包裹大爆發(fā) 菜鳥國際快遞倉發(fā)猛漲300%智己汽車攜全新智己LS6、智己L6登陸2024廣州車展阿維塔11雙動力廣州車展開啟預(yù)售,29.99萬元起一汽-大眾攜三款車型亮相廣州車展中國首臺準(zhǔn)環(huán)對稱仿星器測試平臺(CFQS-T)取得重大突破,此前僅美、德掌握
  • 首頁 > 數(shù)據(jù)存儲頻道 > 數(shù)據(jù)庫頻道 > 編程開發(fā)

    構(gòu)建C語言開發(fā)環(huán)境

    2023年08月18日 16:35:10   來源:51CTO

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

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

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

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

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

      創(chuàng)建Docker鏡像作為vscode的開發(fā)容器;

      基于最小化的Dummy庫,在容器中設(shè)置構(gòu)建庫的工具;

      設(shè)置靜態(tài)代碼分析器clang-tidy檢查代碼是否有常見錯誤;

      clang-format維持代碼庫的格式保持正常和整潔;

      設(shè)置Unity,通過在主機(jī)上執(zhí)行Ceedling測試虛擬函數(shù);

      最后,我們將設(shè)置GitHub工作流,使用本地Docker鏡像執(zhí)行、構(gòu)建和測試項(xiàng)目。

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

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

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

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

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

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

      Dockerfiles不穩(wěn)定:昨天構(gòu)建出的Dockerfile今天就可能無法使用,存在太多的外部依賴關(guān)系;

      Docker不是平臺獨(dú)立型的,例如Apple ARM;

      某些Docker特性僅在Linux或?qū)S肳indows中獲得了支持;例如,并非所有平臺都支持將USB設(shè)備安裝到Docker容器之中,這是自2016年以來的限制。

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

      2.讓我們這樣做

      讓我們從零開始,構(gòu)建空存儲庫:

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

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

      對于基本圖像,我強(qiáng)烈建議使用特定標(biāo)簽。apt包在基本鏡像之間變化很大,選擇標(biāo)記可以為你節(jié)省更多時間;

      我傾向于在鏡像開發(fā)過程中使用特定平臺 ,這一點(diǎn)對后續(xù)開發(fā)步驟的順利進(jìn)行很重要。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      六、添加單元測試框架

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

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

      1.安裝Unity和Ceedling

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

      重建鏡像后,我們就可以開始了!

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

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

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

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

      七、結(jié)論

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

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

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

      文章內(nèi)容僅供閱讀,不構(gòu)成投資建議,請謹(jǐn)慎對待。投資者據(jù)此操作,風(fēng)險自擔(dān)。

    即時

    唯品會雙11銷量前十品牌中有7個國貨品牌

    11月11日,據(jù)網(wǎng)經(jīng)社數(shù)字零售臺(DR.100EC.CN)數(shù)據(jù)顯示,秋冬服飾仍是雙11的C位,女士針織衫、女士外套、女士羽絨服等位居服飾消費(fèi)前列,女士夾克銷量同比增長72%,女士棉衣、女士羊毛衫銷量同比增長50%以上。男士外套銷量同比增長30%以上。

    新聞

    明火炊具市場:三季度健康屬性貫穿全類目

    奧維云網(wǎng)(AVC)推總數(shù)據(jù)顯示,2024年1-9月明火炊具線上零售額94.2億元,同比增加3.1%,其中抖音渠道表現(xiàn)優(yōu)異,同比有14%的漲幅,傳統(tǒng)電商略有下滑,同比降低2.3%。

    企業(yè)IT

    重慶創(chuàng)新公積金應(yīng)用,“區(qū)塊鏈+政務(wù)服務(wù)”顯成效

    “以前都要去窗口辦,一套流程下來都要半個月了,現(xiàn)在方便多了!”打開“重慶公積金”微信小程序,按照提示流程提交相關(guān)材料,僅幾秒鐘,重慶市民曾某的賬戶就打進(jìn)了21600元。

    3C消費(fèi)

    華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,高能實(shí)力,創(chuàng)

    華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,憑借其優(yōu)秀的性能配置和精準(zhǔn)的色彩呈現(xiàn)能力,為您的創(chuàng)作工作帶來實(shí)質(zhì)性的幫助,雙十一期間低至2799元,性價比很高,簡直是創(chuàng)作者們的首選。

    研究

    中國信通院羅松:深度解讀《工業(yè)互聯(lián)網(wǎng)標(biāo)識解析體系

    9月14日,2024全球工業(yè)互聯(lián)網(wǎng)大會——工業(yè)互聯(lián)網(wǎng)標(biāo)識解析專題論壇在沈陽成功舉辦。