适合Linux嵌入式项目的代码构建与依赖管理工具——cazel
前言
我们知道,现在有很多流行的优秀代码构建工具,如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的更多相关文章
- maven——项目构建和依赖管理工具
apache maven是一个用于项目构建和依赖管理的工具. 添加archetype https://repo1.maven.org/maven2/archetype-catalog.xml 更改本地 ...
- JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建
1 学习计划 1.jQuery easyUI中动态添加选项卡 2.jquery ztree插件使用 n 下载ztree n 基于标准json数据构造ztree n 基于简单json数据构造ztree( ...
- golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的
golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的 1:执行脚本setGoPath.sh#!/bin/bashif [[ $GOPATH =~ .*$ ...
- Maven01——简介、安装配置、入门程序、项目构建和依赖管理
1 Maven的简介 1.1 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的 Svn eclipse maven量级 1.2 Maven好处 同 ...
- 无需编写代码,用接口管理工具 eoLinker 高效完成API测试流程相关业务
引言 作为开发人员,有时需要协助市场部门进行开发,比如在市场推广中,经常通过给用户赠送优惠券来提高复购率.这篇文章,将介绍如何使用接口管理工具 eoLinker 的自动化测试 [UI模式] 构建此业务 ...
- 将windows当做linux/Mac来用 scoop强大的包管理工具
在Linux中有apt-get.yum这些包安装管理 安装相当方便:如ubuntu安装一个mysql5.7,只需要一个简单的命令: apt-get 而在windows中需要在MySQL官网下载对应版本 ...
- Rust 之 cargo(项目构建和包管理工具)
如果食用cargo来进行项目构建: 1. 执行 cargo new hello_cargo --bin ,执行完上面的操作之后,我们切换到hell_cargo目录下,可以看到一个文件(Cargo.to ...
- 【htop】Linux CentOS 6.5下安装htop进程管理工具
一.Htop的使用简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (fo ...
- Python web 项目的依赖管理工具
Poetry可以帮助你声明.管理和安装Python项目的依赖项,确保你可以在任何地方都拥有正确的堆栈. Poetry支持Python 2.7 和Python 3以上 安装 Poetry提供了一个自定义 ...
随机推荐
- (四)整合 RocketMQ ,实现请求异步处理
整合 RocketMQ ,实现请求异步处理 1.RocketMQ简介 1.1 架构图片 1.2 角色分类 1.3 通信机制 2.实现案例 2.1 项目结构图 2.2 配置文件 2.3 生产者配置 2. ...
- Django(图书管理系统)
图书管理系统 注意事项 1.models 要创建好,规划好自己的表,以及各种表关系 2.url正则要写好 3.settings的配置 4.利用bootstarp 进行布局更漂亮哦 5.注意orm 各 ...
- 数据库MySQL——SQL语句(命令)
SQL语句分类 DCL (Data Control Language):数据控制语言:用来管理用户及权限 DDL(Data Definition Language):数据定义语言:用来定义数据库对象: ...
- BGP( Border Gateway Protocol)---边界网关协议
摘自: https://blog.csdn.net/weixin_43751619/article/details/84954755 一,BGP协议原理与配置 边界网关协议( Border Gatew ...
- Thank in Java
Think in Java 2.一切都是对象 2.1 引用操作对象 Java 中一切都是对象,因此可以采用单一固定得语法. 操作对象得标识符实际上是对对象得一个 "引用"refer ...
- 【函数分享】每日PHP函数分享(2021-2-6)
array_combine - 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 说明: array_combine ( array $keys , array $values ) : ...
- 【poj 1988】Cube Stacking(图论--带权并查集)
题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...
- 【noi 2.6_9272】偶数个数字3(DP)
题意:问所有的N位数中,有多少个有偶数个数字3的数. 解法:f[i][j]表示i位数中含数字3的个数模2为j的个数.于是分第i位填3还是不填3讨论. 小tip:要模12345:for循环新定义了一个变 ...
- Git关联GitHub
1.打开git命令行工具 2.设置全局用户名.邮箱 git config --global user.name "your_name" git config --global us ...
- Operating System:信号量
pv原语操作(1)操作系统PV意思:PV操作与信号量的处理相关,P表示通过的意度思,V表示释放的意思.(2)p操作和v操作是不可中断问的程序段,称为原语.如果将信号量看作共享变量,则pv操作为其临界区 ...