成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

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

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

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

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

二、在Docker中運行程序 

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

你可以使用Dockerfiles,這能避免在本地安裝工具,任何人都能通過預構建鏡像本地鏡像加入項目。

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

如果你是Docker新手,需注意以下幾點:

  • Dockerfiles不穩(wěn)定:昨天構建出的Dockerfile今天就可能無法使用,存在太多的外部依賴關系;
  • Docker不是平臺獨立型的,例如Apple ARM;
  • 某些Docker特性僅在Linux或專用Windows中獲得了支持;例如,并非所有平臺都支持將USB設備安裝到Docker容器之中,這是自2016年以來的限制。

鑒于此,建議你不要將“賭注”“押”在同一項技術上,并且你需要隨時做好切換的準備。

2.讓我們這樣做 

讓我們從零開始,構建空存儲庫

圖片

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

圖片

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

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

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

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

圖片

3.詳細命令行調用的快捷方式 

Docker命令非常冗長,因此,我通常將常用命令放在makefile項目根目錄中。假設安裝make后可進行如下操作:

圖片

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

圖片

讓我們從圖像中旋轉容器并進行測試:

圖片

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

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

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

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

值得注意的是,vscode實例與本地vscode安裝不匹配,與遠程實例非常相似。

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

圖片

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

圖片

需要一段時間為vscode設置你的容器安裝擴展,并用vscode連接到Linux容器

圖片

四、系統(tǒng)架構 

我們將使用CMake構建單獨的.c和.h對。

圖片

圖片

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

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

圖片

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

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

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

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

圖片

六、添加單元測試框架

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

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

1.安裝Unity和Ceedling 

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

圖片

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

圖片


2.配置Unity和運行單元測試 

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

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

圖片

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

圖片

七、結論

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

圖片

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

圖片

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

責任編輯:龐桂玉 來源: 51CTO技術棧
相關推薦

2011-06-03 13:38:49

Android 開發(fā)環(huán)境

2010-09-14 09:24:29

C語言

2009-07-09 15:31:23

構建Python開發(fā)環(huán)

2014-08-11 10:15:01

Docker開發(fā)環(huán)境

2011-11-21 15:45:28

CGI

2013-05-14 09:54:27

Android開發(fā)開源開發(fā)環(huán)境

2009-07-14 13:14:13

2014-01-07 10:36:32

EclipsSpark

2010-06-12 16:29:00

BlackBerry開

2009-08-24 09:55:24

C#集成開發(fā)環(huán)境

2015-01-22 09:06:31

Docker云計算云應用

2020-03-17 17:49:58

C語言編程語言

2020-03-18 12:23:49

C語言編程語言

2010-09-15 09:00:21

MeeGo TouchQT SDKMeeGo

2010-01-14 16:54:02

C++開發(fā)環(huán)境

2010-01-15 09:58:38

C++ Builder

2010-01-18 15:19:41

Visual C++開

2011-09-21 09:26:31

虛擬化虛擬測試開發(fā)環(huán)境

2010-11-09 09:51:52

匯編語言

2013-04-08 15:52:06

Go語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩亚洲在线 | 黄色网址在线免费观看 | 人人爽日日躁夜夜躁尤物 | 免费在线观看一区二区三区 | 成人免费视频网站在线看 | 日韩欧美网 | 久久99精品视频 | 日韩高清国产一区在线 | 国产精品久久久乱弄 | 91传媒在线观看 | 国产亚韩| 在线视频中文字幕 | 日本成人在线播放 | 激情欧美日韩一区二区 | 亚洲h色 | 日本中文字幕在线视频 | 欧美日韩久久 | 久久亚洲综合 | 欧美成人手机在线 | a在线观看 | 中文一区二区 | 91 中文字幕 | 亚洲日韩中文字幕一区 | 精品在线一区二区 | 天堂亚洲网 | 亚洲一区 | 久久激情视频 | 亚洲午夜小视频 | 欧美日韩精品一区二区三区视频 | 国产精品一区二区三区在线播放 | 亚洲精品在线播放 | 日日夜夜精品视频 | 国产成人久久精品 | 久草院线| av中文字幕在线 | 欧美日韩中文在线 | 国产精品久久久久久久久污网站 | 日韩精品三区 | 欧美高清视频一区 | 天天插天天舔 | 国产一区二区三区 |