
為什么要考慮C/C++的包管理
自從軟件定義汽車的概念風(fēng)靡業(yè)界,大家已經(jīng)清楚認(rèn)識(shí)到未來的汽車產(chǎn)品開發(fā)中,軟件會(huì)占非常重要的地位。
與傳統(tǒng)MCU開發(fā)的不同,在提出SOA面向服務(wù)架構(gòu),基于異構(gòu)SoC開發(fā)的時(shí)候,可以預(yù)想到的是會(huì)有越來越多的應(yīng)用,以包的形式部署在上面。
關(guān)于汽車軟件開發(fā)的關(guān)注的,或者說難點(diǎn),可以閱讀之前發(fā)布的文章:汽車SOA架構(gòu)技術(shù)要點(diǎn)及挑戰(zhàn)
尤其是作為底層軟件供應(yīng)商,或者系統(tǒng)集成供應(yīng)商(也許是OEM自己)來說,如此龐大的基于C/C++的大型項(xiàng)目,如果仍舊按照傳統(tǒng)方式進(jìn)行管理,肯定會(huì)遇到包括但不限于以下問題:
繁雜的構(gòu)建系統(tǒng):gcc, clang, qcc, Ninja, cmake, makefiles..
晃眼的構(gòu)建設(shè)置:操作系統(tǒng),架構(gòu),編譯器類型/版本等等
依賴不可見:無法模塊化地建立依賴關(guān)系
不像js有npm,python有pypi等等,C/C++似乎很難讓你回答出一個(gè)好用又靠譜的包管理器。
尤其是汽車軟件開發(fā)的測(cè)試與驗(yàn)證很多時(shí)候都和硬件打交道,非常消耗時(shí)間,我們勢(shì)必要考慮如何在轉(zhuǎn)移到SOA架構(gòu)時(shí)高效地利用CI/CD系統(tǒng),進(jìn)行開發(fā)與驗(yàn)證呢?總不能開發(fā)人員對(duì)某一個(gè)包的改動(dòng),還要參考各種依賴,以及重復(fù)構(gòu)建吧。
Conan
我們先來看一下官方介紹是怎么解釋的:
Conan is a dependency and package manager for C and C++ languages. It isfree and open-source, and it works in all platforms: Windows, Linux, OSX, FreeBSD, Solaris, etc. and can be used to develop for all targets including embedded, mobile (iOS, Android), bare metal. It also integrates with all build systems like CMake, Visual Studio (MSBuild), Makefiles, SCons, etc., including proprietary ones.
也就是說,Conan是一款免費(fèi)且開源的C/C++包管理器,可以運(yùn)行在多種平臺(tái)上,也可以用來給不同的硬件平臺(tái)做開發(fā),支持CMake, MSBuild, Makefiles, SCons等多種構(gòu)建系統(tǒng)。
對(duì)應(yīng)于js有npm,conan也有Jfrog Artifactory可以用,這樣就無需重復(fù)構(gòu)建已經(jīng)有的包。當(dāng)然,如果公司有要求,肯定是要建立私有服務(wù)器的。

二進(jìn)制包的構(gòu)建

如圖所示,你需要指定你的源文件,包括一些構(gòu)建變量等等,最終可以生成對(duì)應(yīng)的輸出文件。
如果用的是不同的構(gòu)建系統(tǒng),也只需要編寫對(duì)應(yīng)的build info

當(dāng)你基于同樣的源文件但是設(shè)定不同的構(gòu)建選項(xiàng)時(shí),你可以得到一個(gè)recipe生成的不同包:

二進(jìn)制包的管理
Conan最重要的功能之一就是,它可以為任何平臺(tái),任何配置創(chuàng)建并管理已編譯的而僅是文件,這樣就能夠避免重復(fù)構(gòu)建,為開發(fā)和持續(xù)集成節(jié)省大量時(shí)間,與此同時(shí),還能提供良好的可再生性和文件追溯性。
這些關(guān)于包的配置,是寫在"connanfile.py"中,需要定義包的依賴,源代碼(路徑),構(gòu)建方式等等。一個(gè)recipe可以生成很多二進(jìn)制文件,每一個(gè)都對(duì)應(yīng)于一個(gè)某個(gè)特定的操作系統(tǒng),架構(gòu),編譯器,構(gòu)建類型等等。

也就是說,如果你的同事也要構(gòu)建工程時(shí),如果你已經(jīng)上傳過對(duì)應(yīng)的二進(jìn)制文件mylib,那么當(dāng)他用相同配置構(gòu)建時(shí),conan可以幫你的同事直接從服務(wù)器獲取,而不需要花時(shí)間重新構(gòu)建:

Conan的安裝
Conan有多種安裝方式,但官方推薦的是使用pip,即:
pip install conan
另外,你需要確保電腦上Python版本>=3.5
關(guān)于Conan的使用,請(qǐng)關(guān)注后續(xù)文章。
汽車軟件開發(fā)中的應(yīng)用
正如文章開始所說,現(xiàn)在各家都在爭(zhēng)取做自己的汽車os,當(dāng)應(yīng)用開發(fā)者拿到SDK后,借助Conan的功能,快速建立應(yīng)用開發(fā)工程,編寫代碼邏輯,并且構(gòu)建完成二進(jìn)制文件方便后續(xù)的集成測(cè)試以及部署/更新,對(duì)于管理內(nèi)部或者諸多供應(yīng)商的App會(huì)有特別大的幫助。
轉(zhuǎn)載汽車電子相關(guān)文章
轉(zhuǎn)自汽車電子與軟件