1. 程式人生 > 實用技巧 >適合小型嵌入式專案的程式碼構建與依賴管理工具——cazel

適合小型嵌入式專案的程式碼構建與依賴管理工具——cazel

前言

我們知道,現在有很多流行的優秀程式碼構建工具,如jetkins、bazel等。這些不同的構建工具在某擅長的領域起到了舉足輕重的作用。

但是,如果仔細研究就會發現,在嵌入式領域,構建工具是一片空白。除過ROS專案可以使用其配套的catkin_make進行構建外,大部分的嵌入式專案仍在使用原始的CMake和人工管理依賴的方式進行構建。

這就造成一了些問題:如果將不同的模組程式碼合併管理,則在專案規模逐漸增大後,會造成幾乎不可維護的惡果;如果將程式碼分開管理,又需要較多的人力去單獨管理版本依賴。

顯然,這兩種問題都不是我們願意面對的。而cazel,正是為了解決這些問題而出現的。

cazel,即是cmake-bazel。它其於linux shell開發,底層編譯功能基於cmake,但風格上更接近bazel。特別是,它主要著重實現了bazel的亮點功能:通過配置檔案進行依賴的管理,下載。當我們在cazel中配置好依賴時,只需要通過一條簡單的指令,就可以完成依賴同步。這一點上,與bazel是一致的。而因為底層使用cmake實現,cazel能更好的與傳統的cmake專案進行整合,而不像使用bazel時,需要編寫大量的甚至是toolchain的配置來整合。畢竟,bazel的理念是在docker下工作,環境配置僅需一次即可。但是bazel的這一理念並不適合嵌入式環境,docker在嵌入式環境是不易鋪展的。

安裝

可以從github上獲取cazel的程式碼:

git clone https://github.com/maxvalor/cazel

然後安裝依賴和使用指令碼進行簡單的安裝:

sudo apt install jq
sudo ./install.sh

安裝成功後,即可使用cazel help獲取幫助資訊。

使用

cazel實際上是使用cmake進行編譯,所以cazel可以完美的與cmake專案整合。在使用cazel時,只需要在標準的cmake專案中加入一個depends.json檔案即可。如:

{
  "config":{
    "name": "mini_ros_sample",
    "path": "depends",
    "cmake": "",
    "make": "-j8"
  
}, "depends": [ { "local":[ ], "git":[ { "name": "mini_ros", "url": "https://github.com/maxvalor/mini_ros", "branch": "master" } ], "ftp":[ ] } ] }

這個配置檔案告訴json,當前的專案叫做“mini_ros_sample”,它的依賴檔案下載目標為“depends”,當進行build時,預設的cmake引數為空,make引數為“-j8”。

然後它有一個依賴,這個依賴是一個git repo,其名字為“mini_ros”,地址為“https://github.com/maxvalor/mini_ros”,並且,我們要使用這個repo的“master”分去。

這個配置方式和bazel是十分相像的。相信使用過bazel的人會十分容易上手。

而當我們寫好配置檔案,想要同步時,可使用指令:

cazel sync mini_ros_sample

cazel即會自動的根本depends.json進行資源同步,下載相應的資源。然後,通過指令:

cazel build mini_ros_sample

即可完成編譯。編譯後,會在專案目錄下生成build目標,可cd過去執行,也可以直接使用指令進行執行:

cazel exec mini_ros_sample sample

後記

目標cazel處於測試版本階段,仍在進行不斷的更新和完善。後續將會變得更加規範和易於使用。