ethz-asl的catkin simple
catkin_simple可以让其他catkin工程更方便。
CMakeLists.txt Example
下面是一个名为foo的catkin工程的例子
cmake_minimum_required(VERSION 2.8.3)
project(foo)find_package(catkin_simple REQUIRED)catkin_simple()cs_add_library(my_lib src/my_lib.cpp)cs_add_executable(my_exec src/main.cpp)
target_link_libraries(my_exec my_lib)cs_install()cs_install_scripts(scripts/my_script.py)cs_export()
下面一行一行的解释每句语句。
前面几行是标准的CMake必备语句
cmake_minimum_required(VERSION 2.8.3)
project(foo)
声明工程所需CMake最低版本,声明工程的名字。
下面是寻找依赖的其他catkin工程
find_package(catkin_simple REQUIRED)
和其他的 find_package 功能一样,没有什么特别的。
catkin_simple()
之后调用 catkin_simple
catkin_simple()
这句宏从当前package的package.xml
收集build_depend
,之后每一项执行find_package(...)
操作(each with the QUIET option and without the REQUIRES option).如果某些build_depend
不是catkin的package就忽略了。如果当前package依赖一些不存在的catkin的package,catkin_simple会报warning。
然后,这句宏会执行 include_directories(...)
,如果当前package有include
,也会包含进去。
最后,这句宏也会编译ROS的messages、services、actions,只会编译在msg
、srv
、action
文件夹中的消息。当然,编译的前提是 build_depend 中有message_generation
,并且run_depend 中没有message_runtime
.
cs_add_library()
接下来会生成库
cs_add_library(my_lib src/my_lib.cpp)
这句调用会执行CMake的宏 add_library
,之后会调用target_link_libraries(my_lib ${catkin_LIBRARIES})
来链接这个library所需要的库。
最后还做了一些工作,方便之后implicitly调用。
cs_add_executable()
之后加了一个可执行文件
cs_add_executable(my_exec src/main.cpp)
target_link_libraries(my_exec my_lib)
这个和上面的cs_add_library
差不多,只不过这里调用的CMake宏是add_executable(...)
。
这里显示地(explicitly)调用了target_link_libraries
用来链接库的依赖,是因为无法强制目标的创建顺序。
这个可执行文件依旧会自动地链接catkin libraries
cs_install()
cs_install()
cs_install_scripts(scripts/my_script.py)
第一句宏会install所有以cs_
为前缀的库和可执行文件。
这句宏也会install其他你需要的可执行文件(虽然前缀不是cs_)。看源文件好像是会去找 *.h
*.hpp
文件。
这句宏可写可不写。
第二句宏为install指定脚本,路径为${prefix}/lib/${pkg_name}/
cs_export()
最后 export everything
cs_export()
这句宏调用catkin_package(...)
,之后用catkin_simple
就可以自动找寻当前package的libraries。也可以在调用这句宏的同时输入自己需要的参数,最后也会被catkin_package(...)
调用。这句宏一定要写。
catkin_simple存在的缺点
catkin_simple
存在几个已知的缺点(权衡便利之后的结果)
find_package
如果not found ,没有warning- 存在过度链接,因为所有依赖关系、所有库都不加选择地与所有目标链接。
include
文件夹格式必须是project/include/project/...
- 如果添加了新的
.msg
或.srv
文件,只有强制重新执行Cmake,才会检测到 - 所有目标都对任何下游消息生成具有目标依赖性,这导致目标的次优并行化,因为存在不必要的依赖性。(All targets have a target dependency on any downstream message generation, which results in sub-optimal parallelization of targets, as there are unnecessary dependencies created.)
参考
https://github.com/ethz-asl/kalibr/tree/master/catkin_simple
ethz-asl的catkin simple相关推荐
- MPC多旋翼控制 - mav_control_rw项目
MPC多旋翼控制 - mav_control_rw项目 目录 MPC多旋翼控制 - mav_control_rw项目 mav_control_rw项目介绍 项目安装 成果 mav_control_rw ...
- 机器人工程本科专业课教学资源汇总(2018年暑假补充学习用)
手机应用软件:Robotics Engineering - Apps on Google Play This Robotics Engineering App provides the basic k ...
- ethz_aslam_cv2(一) 简介
Introduction aslam_cv2 库是ETHZ ASL团队开源的一个计算机视觉库,主要针对常用的一些算法和数据结构进行了封装.为了提升算法的速度和鲁邦性,用了比较多工程上的技巧,并对一些p ...
- GitHub 上有哪些机器人、无人机、自动控制等方面的有趣项目
/*************************************************************************************************** ...
- 人机智能交互技术(ROS-HRI-人与机器人的智能交互)课程介绍与资料
人机智能交互技术(ROS-HRI-人与机器人的智能交互)课程介绍与资料 这是机器人系统设计与控制技术的后续课程,全部的课程内容包括四门课程(本科),如下: 人机智能交互技术是人机融合的基础,课程介绍多 ...
- 基于haar特征的adaboost算法_SuperGlue一种基于图卷积神经网络的特征匹配算法
ETHZ ASL与Magicleap联名之作,CVPR 2020 Oral(论文见文末),一作是来自ETHZ的实习生,二作是当年CVPR2018 SuperPoint 的作者Daniel DeTone ...
- 国际知名无人机实验室(截止2021年4月)
文章目录 1. 国内实验室 1.1 港科空中机器人研究组(HKUST Aerial Robotics Group) 1.2 浙江大学无人系统与自主计算实 ...
- ethz的多传感器融合算法msf编译与安装
ethz的多传感器融合算法msf编译与安装 1.建立工作空间 2.下载安装所有依赖 2.1 下载依赖库 2.2 安装Google的glog 2.3 安装GeographicLib 2.4 编译 3.报 ...
- ros里Catkin的CMakelists/package.xml
Catkin是基于CMake的编译构建系统,具有以下特点: Catkin沿用了包管理的传统像 find_package()基础结构,pkg-config扩展了CMake,例如 软件包编译后无需安装就可 ...
最新文章
- mysql 常用sql与命令
- Matlab for Linux常用设置
- 收藏 | 机器学习最全知识点汇总(万字长文)
- 用 go 写 WebAssembly入门
- 巧用CSS提升表格呈现性能
- Request中getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath的区别
- razor 怎样使用session变量_Nginx负载均衡解决session一致性问题
- JS高级-闭包-this指向
- html画特殊图形(待修改)
- c语言 static变量和函数
- 20180514 ++i和i++
- 约架的节奏?BAT之后 小米加入地图生态资源争夺战
- elasticsearch设置_search的size
- Linux配置并编译内核
- 解决visio2016与本地家庭和学生版office不兼容问题
- c语言从入门到秃头表情包,c语言从入门到放弃表情包 - c语言从入门到放弃微信表情包 - c语言从入门到放弃QQ表情包 - 发表情 fabiaoqing.com...
- Flowplayer简单酷炫的视频播放器
- 图片放大后不清晰怎么处理?
- 服务网关 Zuul基本使用
- 以程序员的视角带你看郑州
热门文章
- Vue按键修饰符:@keyup.enter
- vim autoformat php,Linux Vim代码格式化/美化插件vim-autoformat安装
- 用matlab实现用Bp神经网络对iris数据集进行分类(以及影响分类性能的参数条件)
- python 爬虫 ip池维护思路
- (ICPR 20) DIP: Distinctive 3D local deep descriptors
- python爬iptv直播源_GitHub - xkloveme/iptv-m3u: python 爬的直播源数据
- 递归算法到非递归算法的转换
- 理解矩阵、矩阵的现实意义(二)
- AES加密解密算法的C代码实现
- Matter理论介绍-通用-1-03:桥接器-数据结构