
為什么要考慮C/C++的包管理
自從軟件定義汽車的概念風靡業界,大家已經清楚認識到未來的汽車產品開發中,軟件會占非常重要的地位。
與傳統MCU開發的不同,在提出SOA面向服務架構,基于異構SoC開發的時候,可以預想到的是會有越來越多的應用,以包的形式部署在上面。
關于汽車軟件開發的關注的,或者說難點,可以閱讀之前發布的文章:汽車SOA架構技術要點及挑戰
尤其是作為底層軟件供應商,或者系統集成供應商(也許是OEM自己)來說,如此龐大的基于C/C++的大型項目,如果仍舊按照傳統方式進行管理,肯定會遇到包括但不限于以下問題:
繁雜的構建系統:gcc, clang, qcc, Ninja, cmake, makefiles..
晃眼的構建設置:操作系統,架構,編譯器類型/版本等等
依賴不可見:無法模塊化地建立依賴關系
不像js有npm,python有pypi等等,C/C++似乎很難讓你回答出一個好用又靠譜的包管理器。
尤其是汽車軟件開發的測試與驗證很多時候都和硬件打交道,非常消耗時間,我們勢必要考慮如何在轉移到SOA架構時高效地利用CI/CD系統,進行開發與驗證呢?總不能開發人員對某一個包的改動,還要參考各種依賴,以及重復構建吧。
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++包管理器,可以運行在多種平臺上,也可以用來給不同的硬件平臺做開發,支持CMake, MSBuild, Makefiles, SCons等多種構建系統。
對應于js有npm,conan也有Jfrog Artifactory可以用,這樣就無需重復構建已經有的包。當然,如果公司有要求,肯定是要建立私有服務器的。

二進制包的構建

如圖所示,你需要指定你的源文件,包括一些構建變量等等,最終可以生成對應的輸出文件。
如果用的是不同的構建系統,也只需要編寫對應的build info

當你基于同樣的源文件但是設定不同的構建選項時,你可以得到一個recipe生成的不同包:

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

也就是說,如果你的同事也要構建工程時,如果你已經上傳過對應的二進制文件mylib,那么當他用相同配置構建時,conan可以幫你的同事直接從服務器獲取,而不需要花時間重新構建:

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