為什么要考慮C/C++的包管理
自從軟件定義汽車的概念風靡業(yè)界,大家已經(jīng)清楚認識到未來的汽車產(chǎn)品開發(fā)中,軟件會占非常重要的地位。
與傳統(tǒng)MCU開發(fā)的不同,在提出SOA面向服務架構(gòu),基于異構(gòu)SoC開發(fā)的時候,可以預想到的是會有越來越多的應用,以包的形式部署在上面。
關(guān)于汽車軟件開發(fā)的關(guān)注的,或者說難點,可以閱讀之前發(fā)布的文章:汽車SOA架構(gòu)技術(shù)要點及挑戰(zhàn)
尤其是作為底層軟件供應商,或者系統(tǒng)集成供應商(也許是OEM自己)來說,如此龐大的基于C/C++的大型項目,如果仍舊按照傳統(tǒng)方式進行管理,肯定會遇到包括但不限于以下問題:
繁雜的構(gòu)建系統(tǒng):gcc, clang, qcc, Ninja, cmake, makefiles..
晃眼的構(gòu)建設置:操作系統(tǒng),架構(gòu),編譯器類型/版本等等
依賴不可見:無法模塊化地建立依賴關(guān)系
不像js有npm,python有pypi等等,C/C++似乎很難讓你回答出一個好用又靠譜的包管理器。
尤其是汽車軟件開發(fā)的測試與驗證很多時候都和硬件打交道,非常消耗時間,我們勢必要考慮如何在轉(zhuǎn)移到SOA架構(gòu)時高效地利用CI/CD系統(tǒng),進行開發(fā)與驗證呢?總不能開發(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是一款免費且開源的C/C++包管理器,可以運行在多種平臺上,也可以用來給不同的硬件平臺做開發(fā),支持CMake, MSBuild, Makefiles, SCons等多種構(gòu)建系統(tǒng)。
對應于js有npm,conan也有Jfrog Artifactory可以用,這樣就無需重復構(gòu)建已經(jīng)有的包。當然,如果公司有要求,肯定是要建立私有服務器的。
二進制包的構(gòu)建
如圖所示,你需要指定你的源文件,包括一些構(gòu)建變量等等,最終可以生成對應的輸出文件。
如果用的是不同的構(gòu)建系統(tǒng),也只需要編寫對應的build info
當你基于同樣的源文件但是設定不同的構(gòu)建選項時,你可以得到一個recipe生成的不同包:
二進制包的管理
Conan最重要的功能之一就是,它可以為任何平臺,任何配置創(chuàng)建并管理已編譯的而僅是文件,這樣就能夠避免重復構(gòu)建,為開發(fā)和持續(xù)集成節(jié)省大量時間,與此同時,還能提供良好的可再生性和文件追溯性。
這些關(guān)于包的配置,是寫在"connanfile.py"中,需要定義包的依賴,源代碼(路徑),構(gòu)建方式等等。一個recipe可以生成很多二進制文件,每一個都對應于一個某個特定的操作系統(tǒng),架構(gòu),編譯器,構(gòu)建類型等等。
也就是說,如果你的同事也要構(gòu)建工程時,如果你已經(jīng)上傳過對應的二進制文件mylib,那么當他用相同配置構(gòu)建時,conan可以幫你的同事直接從服務器獲取,而不需要花時間重新構(gòu)建:
Conan的安裝
Conan有多種安裝方式,但官方推薦的是使用pip,即:
pip install conan
另外,你需要確保電腦上Python版本>=3.5
關(guān)于Conan的使用,請關(guān)注后續(xù)文章。
汽車軟件開發(fā)中的應用
正如文章開始所說,現(xiàn)在各家都在爭取做自己的汽車os,當應用開發(fā)者拿到SDK后,借助Conan的功能,快速建立應用開發(fā)工程,編寫代碼邏輯,并且構(gòu)建完成二進制文件方便后續(xù)的集成測試以及部署/更新,對于管理內(nèi)部或者諸多供應商的App會有特別大的幫助。
轉(zhuǎn)載汽車電子相關(guān)文章
轉(zhuǎn)自汽車電子與軟件


