適合小型嵌入式專案的程式碼構建與依賴管理工具——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處於測試版本階段,仍在進行不斷的更新和完善。後續將會變得更加規範和易於使用。