前言

我们知道,现在有很多流行的优秀代码构建工具,如CMake、jetkins、bazel等。这些不同的构建工具在其应用的领域起到了举足轻重的作用。

但是,如果仔细研究就会发现,在嵌入式领域,构建工具几乎是一片空白。除过ROS项目可以使用其配套的catkin_make进行构建外,大部分的嵌入式项目仍在使用原始的CMake和人工管理依赖的方式进行构建。

这就造成一了些问题:如果将不同的模块代码合并管理,则在项目规模逐渐增大后,会造成几乎不可维护的恶果;如果将代码分开管理,又需要较多的人力去单独管理版本依赖。

显然,这两种问题都不是我们愿意面对的。而cazel,正是为了解决这些问题而出现的。

cazel是一款应用于Linux环境的轻量级代码构建与依赖管理工具。它其于linux shell开发,底层编译功能基于cmake,但风格上更接近bazel。特别是,它主要着重实现了bazel的亮点功能:通过配置文件进行依赖的管理与下载。当我们在cazel中配置好依赖时,只需要通过一条简单的指令,就可以完成依赖同步。这与bazel是一致的。由于底层使用cmake实现,cazel能更好的与传统的cmake项目进行整合,不像使用bazel时,需要编写大量的甚至是toolchain的配置来整合。毕竟,bazel的理念是在docker下工作,环境配置仅需一次即可,这一条件并不适合嵌入式环境,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处于测试版本阶段,仍在进行不断的更新和完善。后续将会变得更加规范和易于使用。

适合Linux嵌入式项目的代码构建与依赖管理工具——cazel的更多相关文章

  1. maven——项目构建和依赖管理工具

    apache maven是一个用于项目构建和依赖管理的工具. 添加archetype https://repo1.maven.org/maven2/archetype-catalog.xml 更改本地 ...

  2. JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建

    1 学习计划 1.jQuery easyUI中动态添加选项卡 2.jquery ztree插件使用 n 下载ztree n 基于标准json数据构造ztree n 基于简单json数据构造ztree( ...

  3. golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的

    golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的 1:执行脚本setGoPath.sh#!/bin/bashif [[ $GOPATH =~ .*$ ...

  4. Maven01——简介、安装配置、入门程序、项目构建和依赖管理

    1 Maven的简介 1.1 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的 Svn eclipse   maven量级 1.2 Maven好处 同 ...

  5. 无需编写代码,用接口管理工具 eoLinker 高效完成API测试流程相关业务

    引言 作为开发人员,有时需要协助市场部门进行开发,比如在市场推广中,经常通过给用户赠送优惠券来提高复购率.这篇文章,将介绍如何使用接口管理工具 eoLinker 的自动化测试 [UI模式] 构建此业务 ...

  6. 将windows当做linux/Mac来用 scoop强大的包管理工具

    在Linux中有apt-get.yum这些包安装管理 安装相当方便:如ubuntu安装一个mysql5.7,只需要一个简单的命令: apt-get 而在windows中需要在MySQL官网下载对应版本 ...

  7. Rust 之 cargo(项目构建和包管理工具)

    如果食用cargo来进行项目构建: 1. 执行 cargo new hello_cargo --bin ,执行完上面的操作之后,我们切换到hell_cargo目录下,可以看到一个文件(Cargo.to ...

  8. 【htop】Linux CentOS 6.5下安装htop进程管理工具

    一.Htop的使用简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (fo ...

  9. Python web 项目的依赖管理工具

    Poetry可以帮助你声明.管理和安装Python项目的依赖项,确保你可以在任何地方都拥有正确的堆栈. Poetry支持Python 2.7 和Python 3以上 安装 Poetry提供了一个自定义 ...

随机推荐

  1. pytest内核测试平台落地初体验

    测试平台,有人说它鸡肋,有人说它有用,有人说它轮子,众说纷纭,不如从自身出发,考虑是否要做测试平台: 第1阶段,用Python+requests写接口自动化. 第2阶段,选择unitttest或pyt ...

  2. docker学习二

    B站视频地址 3.docker的基本操作 3.1 安装docker 1.下载关于Docker的依赖环境 想安装Docker,需要先将依赖的环境全部下载下来,就像Maven依赖JDK一样 yum -y ...

  3. 基于线段树的RMQ

    RMQ(Range Minimum/Maximum Query)区间最值查询,即给出长度为n的数组A,以及m组询问s.t(s<=t<=n),返回区间[s,t]中的最值. 基于线段树的方法实 ...

  4. CF Hello2020 D. New Year and Conference

    D. New Year and Conference 题意 有\(2n\)个区间,分别为\([sa_1,ea_1],[sb_1,eb_1],[sa_2,ea_2],[sb_2,eb_2],\cdots ...

  5. 【poj 2752】Seek the Name, Seek the Fame(字符串--KMP)

    题意:给出一个字符串str,求出str中存在多少子串,使得这些子串既是str的前缀,又是str的后缀.从小到大依次输出这些子串的长度. 解法:利用KMP中next[ ]数组的性质,依次找到前缀.后缀匹 ...

  6. R - 0 or 1(最短路)

    Given a n*n matrix C ij (1<=i,j<=n),We want to find a n*n matrix X ij (1<=i,j<=n),which ...

  7. Codeforces Round #340 (Div. 2) E. XOR and Favorite Number

    time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standa ...

  8. java——类、对象、private、this关键字

    一.定义  二.类的使用 实例:定义的类要在一个class文件内,实例化类的对象要在另一个文件内 类文件: 实例文件: 对象内存图: 先主函数入栈,之后新开一个对象存入堆内存中,之后调用的call方法 ...

  9. Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal (思维,逆序对)

    题意:给你一个字符串,每次可以调换现字符串的相邻两个字符,问最少操作多少次使得这个字符串等于其反转过来的字符串. 题解:先考虑字符串中没有相同字符的情况,那么我们每次将目前字符串的最后一个字符一直调换 ...

  10. WPF 之路由事件和附加事件(六)

    一.消息驱动与直接事件模型 ​ 事件的前身是消息(Message).Windows 是消息驱动的系统,运行其上的程序也遵循这个原则.消息的本质就是一条数据,这条消息里面包含着消息的类别,必要的时候还记 ...