
為(wèi)什(shén)麽要(yào)考慮C/C++的(de✔')包管理(lǐ)
自(zì)從(cóng)軟件(jiàn)定義汽車(chē)的(de)概念風(fēng) >靡業(yè)界,大(dà)家(jiā)已經清楚認識到(®¥±dào)未來(lái)的(de)汽車(chē)産品開πλ™±(kāi)發中,軟件(jiàn)會(huì)占非常重要(yào♣☆§)的(de)地(dì)位。
與傳統MCU開(kāi)發的(de)不(bù)同,在提出→$×SOA面向服務架構,基于異構SoC開(kāi)←≥ 發的(de)時(shí)候,可(kě)以預想到(dào)的≤&←(de)是(shì)會(huì)有(yǒu)越來(lái)↑∞™越多(duō)的(de)應用(yòng),以包的(de)形式部署在上(shà₹ng)面。
關于汽車(chē)軟件(jiàn)開(kāi)發的(de)Ω¶♣關注的(de),或者說(shuō)難點,可(kě)以閱讀(dú)之前發布的(de)文(wén)≤÷→章(zhāng):汽車(chē)SOA架構技(jì)術(shù)要(yào)點及挑₩δ★戰
尤其是(shì)作(zuò)為(wèi)底層軟件(jiàn)供應商,或者系統集成供 →₽應商(也(yě)許是(shì)OEM自(zì)己)來(lái)說(shuō),如(rú™)此龐大(dà)的(de)基于C/C++的(de)大(dà)型項目,如(r>>£<ú)果仍舊(jiù)按照(zhào)傳統方式₹§↔進行(xíng)管理(lǐ),肯定會(hu₹<ì)遇到(dào)包括但(dàn)不(bù)限于以下(xià)問(wèn)題:
繁雜(zá)的(de)構建系統:gcc, clang, qcc, Ni←>£¶nja, cmake, makefiles..
晃眼的(de)構建設置:操作(zuò)系統,架構,編譯器(q≈λ™ì)類型/版本等等
依賴不(bù)可(kě)見(jiàn):無法模塊化(huà)地(dì)建立依賴關系
不(bù)像js有(yǒu)npm,python有(yǒu)pypi等等,C/>↕¥γC++似乎很(hěn)難讓你(nǐ)回答(dá)出一(yī)個(gèαβ)好(hǎo)用(yòng)又(yòu)靠譜的(de)包管理(lǐ)器(qì)。
尤其是(shì)汽車(chē)軟件(j ♠±iàn)開(kāi)發的(de)測試與驗證很(↑✔hěn)多(duō)時(shí)候都(dōu)和(hé)硬件(jiàn)打交道(dào©★₽),非常消耗時(shí)間(jiān),我們勢必要(yào)考慮₽Ω 如(rú)何在轉移到(dào)SOA架構時(shí)高(gāo)效地(dì)利用(yòng)CI×≠/CD系統,進行(xíng)開(kāi)→<發與驗證呢(ne)?總不(bù)能(néng)開(kāi)™γ✘發人(rén)員(yuán)對(duì)某一(yī)個(g§ε§è)包的(de)改動,還(hái)要(yào)參考各種依賴,以及重複構建吧(ba↔☆)。
Conan
我們先來(lái)看(kàn)一(yī)下(xià)官方介紹是(shì)怎麽解釋的(de)♣ε:
Conan is a dependency and pa♦₩÷εckage 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 d↑≤evelop for all targets including embedded,∑<↕₽ mobile (iOS, Android), bare metal. I"Ω'♥t also integrates with all build systems€₽ like CMake, Visual Studio (MSBuild)∏↓☆δ, Makefiles, SCons, etc., i&₽ncluding proprietary ones.
也(yě)就(jiù)是(shì)說(shuō),Conan↔是(shì)一(yī)款免費(fèi)且開(kāi)源的(de)C/C++包管理←(lǐ)器(qì),可(kě)以運行(xíng)在多(duō)種平台上(shàng),也(yě>§≥)可(kě)以用(yòng)來(lái)給不(bù)同的(de)硬件(jiàn)平台做(zu<♠₽→ò)開(kāi)發,支持CMake, MSBuild, Makefiles, SC δons等多(duō)種構建系統。
對(duì)應于js有(yǒu)npm,conan也(yě)有(yǒu)Jfrog Artifa♥≥&ctory可(kě)以用(yòng),這™ε(zhè)樣就(jiù)無需重複構建已經有(yǒu)的(de)包。當然,∑₽₹如(rú)果公司有(yǒu)要(yào)求,肯定是(shì)要(yào)建立私有(yǒu)服≤π↕±務器(qì)的(de)。

二進制(zhì)包的(de)構建

如(rú)圖所示,你(nǐ)需要(yào)指定你(nǐ)的(de)源文(wén)件(jià≥"n),包括一(yī)些(xiē)構建變量等等,最終可(kě)以生(shēng)成對(duì)應的(©©♦≥de)輸出文(wén)件(jiàn)。
如(rú)果用(yòng)的(de)是(shì)不(bù)同的(de)構建系統,'✘γ也(yě)隻需要(yào)編寫對(duì)應的(de)build info

當你(nǐ)基于同樣的(de)源文(wδ&₩→én)件(jiàn)但(dàn)是(shì)設定不(bù)同的(de)構建選項δ♦時(shí),你(nǐ)可(kě)以得(de)到(dào)一(yī)個(gè)reci' Ωpe生(shēng)成的(de)不(bù)同包:

二進制(zhì)包的(de)管理(lǐ)
Conan最重要(yào)的(de)功能(néng)♣×之一(yī)就(jiù)是(shì),它可(kě)以為(wèi)任何平台,任何配✔<₽置創建并管理(lǐ)已編譯的(de)而僅是(shì)文(wén)件(jià∏↓→'n),這(zhè)樣就(jiù)能(néng)夠避免重複構建,為(wèi)開(kāi)發和(h£✔Ωé)持續集成節省大(dà)量時(shí)間(jiān),與此同時(shí),還(hái)能(n₽♣☆©éng)提供良好(hǎo)的(de)可(kě)再生(shē÷γΩng)性和(hé)文(wén)件(jiàn)追溯性。
這(zhè)些(xiē)關于包的(de)配置,是₽ε≠∑(shì)寫在"connanfile.py"™£中,需要(yào)定義包的(de)依賴,源代碼(路£¶(lù)徑),構建方式等等。一(yī)個(gè)recipe€¶可(kě)以生(shēng)成很(hěn)多(duō)二進制(zhì)文(wén)件(j® ¥iàn),每一(yī)個(gè)都(dōu)對(duì)應于一(yī)個$≤∏(gè)某個(gè)特定的(de)操作(zuò)∑↕系統,架構,編譯器(qì),構建類型等等。

也(yě)就(jiù)是(shì)說(shuō),如(rú)果你(nǐ)的(de)同事(shσ ì)也(yě)要(yào)構建工(gōng)程時(shí),如(∏γ∞rú)果你(nǐ)已經上(shàng)傳過對(duì)應的(de)二進制(zhì)←ε文(wén)件(jiàn)mylib,那(nà)麽當他(tā)用(yòng)相(xi $àng)同配置構建時(shí),conan可(kě)以幫你(nǐ)的(de)同事(shì)直接↑♠≠從(cóng)服務器(qì)獲取,而不(bù)需要(yào)花(huā)時(shí)間(j•>iān)重新構建:

Conan的(de)安裝
Conan有(yǒu)多(duō)種安裝方式,但(dàn)官方推薦的(de)是(shì)≤£±δ使用(yòng)pip,即:
pip install conan
另外(wài),你(nǐ)需要(yào)♥ ≥≤确保電(diàn)腦(nǎo)上(shàng)Python版本>=3.5
關于Conan的(de)使用(yòng),請(qǐng)關注後續文(wén)章(zhānβδg)。
汽車(chē)軟件(jiàn)開(kāi)發中的(de)應用(yòng)
正如(rú)文(wén)章(zhāng)ε¥開(kāi)始所說(shuō),現(xiàn)在各家(j¥£'iā)都(dōu)在争取做(zuò)自(zì)己的(dλ±✘γe)汽車(chē)os,當應用(yòng)開(kā¶& i)發者拿(ná)到(dào)SDK後,借助Cona♠•®n的(de)功能(néng),快(kuài)速建立應用(yòng&&×)開(kāi)發工(gōng)程,編寫代碼邏輯,并且構建完成二進制(zhì)文(λ∞wén)件(jiàn)方便後續的(de)集成測試以及部署/更新,對(duì)于管理(§lǐ)內(nèi)部或者諸多(duō)供應商的(♣≠•de)App會(huì)有(yǒu)特别大(dà)的(de)幫→"助。
轉載汽車(chē)電(diàn)子(zǐ)相(xiàγ∏δng)關文(wén)章(zhāng)
轉自(zì)汽車(chē)電(diàn)子(zǐ)與軟件(jiàn)