首页 > 其他分享 >colcon构建工具

colcon构建工具

时间:2024-11-01 19:49:11浏览次数:2  
标签:文件 功能 colcon -- 构建 测试 工具

colcon工具相对于bazel等,效率不算高,但是其模块化做得好,易用性程度高

通过解析package.xml获取配置信息,包括描述规范,名称,版本,构建方法和测试方法等

有关依赖会附有_depend扩展名说明
如构建依赖build_depend
构建工具依赖buildtool_depend
测试依赖test_depend
运行依赖exec_depend

colcon支持的构建方式

  • cmake
    不使用任何ROS相关依赖的构建方式,很多支持ROS或ROS2的第三方库便是这种构建方式
  • ament_cmake
    支持C/C++项目,更高效地获取ROS相关基础功能库,也可以使用所有通过ament工具链定义的功能
  • ament_python
    支持Python项目

构建过程中,colcon会按照依赖关系按顺序对功能包进行编译安装,所有依赖都是从环境变量或本地路径进行查找,不允许路径中出现两个同名的功能包

若在构建过程中,没有找到相应的功能包,colcon不会报错,而会继续构建,这与CMake中的find_packageREQUIRE机制是有区别的

colcon是抽象在ament之上的,ament工具链服务于ROS2相关功能包,而colcon可扩展到其他项目
colcon组织的项目分为核心项目core和扩展项目extension
colcon-core是colcon的核心项目,colcon-gradle是支持Java Gradle项目的扩展项目

colcon工具链支持了build,edit,graph,info,test,metadata,mixin等多个命令参数
colcon本身是一个模块化的工具链,所有colcon命令行参数都由相应的安装包提供,如build功能由colcon-core提供,edit功能由colcon-ed提供,可用colcon -h查看是否有相关包进行支持

colcon会跳过COLCON_IGNORE文件的目录

colcon构建

colcon build
通过目录下每一个功能包中的package.xml所共同描述的依赖拓扑关系,依次完成构建
若依赖拓扑关系中没有依赖项目,不会强制终止,也不会输出错误或警告,会继续构建

colcon build参数支持输入cmake参数,如通过--cmake-args输入cmake的-D参数

colcon的构建方式有两种

  • merge方式,默认,参数--merge-install
    将所有功能包的同类型文件放在一起
    可执行文件一般放在bin文件夹,二进制库和节点类执行文件会放在lib
    头文件会放在include下,其他的共享文件会放在share
  • symlink方式,參數--symlink-install
    将每个功能包独立存放于安装目录,在每个安装目录下,会按类型(如bin,include,lib,share等)建立文件夹,这些文件夹命名和分类被称作ROS的文件系统层级标准
    通过软链接方式指向脚本文件,如Python文件,允许当source空间中文件改变时安装的文件也会随之改变
    以动态链接库为例,会在install目录下使用符号链接,指向build目录下生成的.so库文件,否则两个目录都有库文件

mergesymlink生成的文件从功能上看是一致的,生成的文件夹主要有

  • build
    存放构建时生成的中间文件,如.c.cpp文件的.o文件,需要联互联网下载的外部功能包等
  • install
    存放最终生成的文件,即安装路径,该路径可用指令中提供的参数--install-base修改
    包括配置脚本文件local_setupsetup.ps1用于windows平台,其他平台可用.sh/.bash/.zsh
  • log
    存放构建过程中生成的日志文件,日志文件会按构建和测试时间进行分类
    默认提供三个软链接latestlatest_buildlatest_test
    分别链接最近一次操作结果,最近一次构建结果和最近一次测试结果日志

其他参数

  • --packages-select
    指定需要构建的功能包
  • --packages-ignore
    忽视不需要构建的功能包

--packages-up-to
--install-base参数指定安装路径
--parallel表示最多可并行构建的功能包数
--event-handlers表示处理事件的方式
console_cohesion+表示构建结束后输出到终端,+表示启用,-表示不启用,默认不启用

colcon测试

colcon test在选择参数--merge-install--symlink-install时应与colcon build对应

测试指令参数中,测试方式需要与构建方式(mergesymlink)一致

测试指令可用参数控制输出到终端的内容,如--return-code-on-test-failure约束在失败时输出非0结果,以确保CI检查器可以捕获失败结果

--packages-up-to
--ctest-args控制cmake测试参数
--pytest-args控制python测试参数

测试包括静态测试和动态单元测试

  • 静态测试
    面向源代码进行筛查,会检查源码中各个文件的格式和规范,如XML文件,CMake文件,C++/Python文件等
  • 单元测试
    需要构建二进制程序,测试时调用该程序,完成各个单元功能的测试,并根据结果和断言的匹配程度来判断是否通过测试

相对于静态测试,单元测试需要工程师进行编码,并且需要测试人员对被测试体的功能十分熟悉i,以确保足够的测试覆盖率

colcon test可选参数说明

  • --event-handlers
  • console_cohesion+
  • --packages-select
    指定需要测试的功能包
  • --symlink-install

无论是否指定console_cohesion测试结果会保存在log路径下的latest_test

colcon查阅

colcon info
查看功能包基本信息,以及功能包的依赖,来自colcon-package-infomation扩展包
--paths--base-paths这两个参数由discovery arguments功能支持,帮助指令快速找到功能包,若输入多个参数,则取并集,前者由colcon-core提供,后者是colcon-recursive-crawl提供

packages-up-to参数由package selection arguments提供,帮助快速查找包,并支持多个参数

colcon listcolcon-package-infomation提供的枚举功能包的指令
可通过discovery arguments和package selection arguments增加约束
-nnames-only的缩写,表示只显示包名
-t--topological-order的缩写,表示按拓扑关系以广度优先显示

colcon graph的功能由colcon-package-infomation提供
为功能包之间的依赖提供可视化表示
--density提供了图的密度计算结果
--legend提供了图的说明
--dot提供了dot格式的输出结果

colcon插件

colcon_cd快速查询并进入功能包

echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=~/ros2_ws" >> ~/.bashrc

colcon_argcompletetab补全

echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc

cmake

设置动态库和可执行文件的变量名称

添加include为头文件查找目录
添加可执行文件add_executable和库add_libraries的实现
并指明为共享库SHARED

链接和头文件做了区分安装

测试部分参考if(BUILD_TESTING)后的内容
ament_lint_auto负责静态测试
ament_cmake_gtest负责单元测试

最后使用ament系列的CMake指令,完成对头文件目录和库的导出,便于其他包查找和链接
ament开头的指令会生成一系列CMake文件,并安装到share目录

rosdep
sudo rosdep init
rosdep update

ROS的依赖工具
rosdep
install 安装
–ignore-src 忽略已安装的包
–from-path src 指定安装依赖路径
–rosdistro humble 指定ROS版本
-y 默认确认

标签:文件,功能,colcon,--,构建,测试,工具
From: https://www.cnblogs.com/sgqmax/p/18521144

相关文章

  • 诛仙2:荣耀之路|单机安装教程|虚拟机一键端|GM工具包
    今天给大家带来一款单机游戏的架设:诛仙2:荣耀之路。游戏版本:v2.2.9只适用于单机娱乐,此教程是本人亲测所写,踩坑无数,如果你是小白跟着教程走也是可以搭建成功   亲测视频演示https://githubs.xyz/show/292.mp4 游戏安装步骤此游戏架设需要安装虚拟机,......
  • 超好用、超良心的 4个AI 工具分享
    这是我尝试的上百种AI工具,用了好几个月之后,总结出来的。无论是日常办公、学术研究,还是艺术创作的常用AI工具,他们有的实用,有的准确,有的有趣,有的非常有创意!都能满足你的各种需求。希望这些工具能成为你日常工作的得力助手。1、文思助手:写作工具文思助手是一款功能强大的AI写作......
  • 电商行业 | 用好企业培训工具,打造精英团队!
    在竞争激烈的电商行业中,人才是企业最宝贵的资源。如何持续提升员工的专业技能和服务水平,打造一支高效、专业的金牌员工队伍,是每个电商企业面临的重要课题。企业培训工具作为提升员工能力的关键手段,正逐渐成为电商行业不可或缺的一部分。本文将探讨如何利用企业培训工具,为电......
  • 【MemTester】内存测试工具Memtester使用方法
    1.MemTester简介MemTester是一个用于压力测试内存子系统的工具,它特别有效于发现间歇性和非确定性的故障。以下是MemTester的一些主要特点和功能:内存错误捕获:MemTester主要用于捕获内存错误和识别一直处于高或低电平的坏位。多种测试项目:它提供了一系列测试项目,包括随机值测试......
  • CATIA许可证管理工具
    CATIA许可证管理工具:优化资源配置,提升设计效率在工程设计领域,CATIA软件以其出色的性能和广泛的应用范围赢得了众多用户的青睐。然而,随着企业规模的扩大和项目的增多,CATIA许可证的管理成为一项关键任务。为了更好地优化资源配置和提升设计效率,一款专业的CATIA许可证管理工具应运而......
  • 诛仙2:为爱成神|单机安装教程|虚拟机一键端|GM工具包
    今天给大家带来一款单机游戏的架设:诛仙2:为爱成神。游戏版本:v2.2.8只适用于单机娱乐,此教程是本人亲测所写,踩坑无数,如果你是小白跟着教程走也是可以搭建成功     亲测视频演示https://githubs.xyz/show/291.mp4 游戏安装步骤此游戏架设需要安装虚拟机......
  • 构建Node.js的应用镜像
    在现代软件开发中,Docker已成为构建和部署应用的重要工具。今天,我们将深入探讨如何优化一个Node.js应用的Dockerfile,以支持多版本、多语言,并保持构建环境的干净。首先,让我们看看我们的基础Dockerfile:#构建阶段:使用Node.js16和DebianBuster作为基础镜像FROMno......
  • 项目实战:Qt+OpenCV仿射变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出
    需求  1.打开图片;  2.矫正识别角点;  3.opencv摄像头操作子线程处理;  4.支持设置棋盘格的行列角点数; 背景  深入研究图像拼接细分支算法,产出的效果查看工具,验证算法单步思路。 相关博客  《项目实战:Qt+Opencv相机标定工具v1.3.0(支持打开摄像头、视......
  • 国标GB28181设备管理软件LiteGBS国标GB28181-2016平台构建雪亮工程视频监控系统
    近年来,“雪亮工程”在全国范围内得到了大力推广和实施。该工程秉承“群众的眼睛是雪亮的”这一核心理念,利用现代信息技术,旨在提高基层治安综合治理的能力,特别是在治安防控、人口服务、信息宣传和矛盾纠纷调解等方面。通过建立三级综治中心,将视频监控系统与综治信息化平台相融合,国......
  • RK3568开发板Openwrt文件系统构建
    iTOP-RK3568开发板使用教程更新,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发速度。本次更新内容为《iTOP-3568开发板文件系统构建手册》,对Openwrt文件系统的编译烧写以及系统移植步骤进行详细介绍。      教程目录第1章Linux文件系统简介1.1知识导......