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,只会编译在msgsrvaction文件夹中的消息。当然,编译的前提是 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相关推荐

  1. MPC多旋翼控制 - mav_control_rw项目

    MPC多旋翼控制 - mav_control_rw项目 目录 MPC多旋翼控制 - mav_control_rw项目 mav_control_rw项目介绍 项目安装 成果 mav_control_rw ...

  2. 机器人工程本科专业课教学资源汇总(2018年暑假补充学习用)

    手机应用软件:Robotics Engineering - Apps on Google Play This Robotics Engineering App provides the basic k ...

  3. ethz_aslam_cv2(一) 简介

    Introduction aslam_cv2 库是ETHZ ASL团队开源的一个计算机视觉库,主要针对常用的一些算法和数据结构进行了封装.为了提升算法的速度和鲁邦性,用了比较多工程上的技巧,并对一些p ...

  4. GitHub 上有哪些机器人、无人机、自动控制等方面的有趣项目

    /*************************************************************************************************** ...

  5. 人机智能交互技术(ROS-HRI-人与机器人的智能交互)课程介绍与资料

    人机智能交互技术(ROS-HRI-人与机器人的智能交互)课程介绍与资料 这是机器人系统设计与控制技术的后续课程,全部的课程内容包括四门课程(本科),如下: 人机智能交互技术是人机融合的基础,课程介绍多 ...

  6. 基于haar特征的adaboost算法_SuperGlue一种基于图卷积神经网络的特征匹配算法

    ETHZ ASL与Magicleap联名之作,CVPR 2020 Oral(论文见文末),一作是来自ETHZ的实习生,二作是当年CVPR2018 SuperPoint 的作者Daniel DeTone ...

  7. 国际知名无人机实验室(截止2021年4月)

    文章目录 1. 国内实验室             1.1 港科空中机器人研究组(HKUST Aerial Robotics Group)             1.2 浙江大学无人系统与自主计算实 ...

  8. ethz的多传感器融合算法msf编译与安装

    ethz的多传感器融合算法msf编译与安装 1.建立工作空间 2.下载安装所有依赖 2.1 下载依赖库 2.2 安装Google的glog 2.3 安装GeographicLib 2.4 编译 3.报 ...

  9. ros里Catkin的CMakelists/package.xml

    Catkin是基于CMake的编译构建系统,具有以下特点: Catkin沿用了包管理的传统像 find_package()基础结构,pkg-config扩展了CMake,例如 软件包编译后无需安装就可 ...

最新文章

  1. mysql 常用sql与命令
  2. Matlab for Linux常用设置
  3. 收藏 | 机器学习最全知识点汇总(万字长文)
  4. 用 go 写 WebAssembly入门
  5. 巧用CSS提升表格呈现性能
  6. Request中getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath的区别
  7. razor 怎样使用session变量_Nginx负载均衡解决session一致性问题
  8. JS高级-闭包-this指向
  9. html画特殊图形(待修改)
  10. c语言 static变量和函数
  11. 20180514 ++i和i++
  12. 约架的节奏?BAT之后 小米加入地图生态资源争夺战
  13. elasticsearch设置_search的size
  14. Linux配置并编译内核
  15. 解决visio2016与本地家庭和学生版office不兼容问题
  16. c语言从入门到秃头表情包,c语言从入门到放弃表情包 - c语言从入门到放弃微信表情包 - c语言从入门到放弃QQ表情包 - 发表情 fabiaoqing.com...
  17. Flowplayer简单酷炫的视频播放器
  18. 图片放大后不清晰怎么处理?
  19. 服务网关 Zuul基本使用
  20. 以程序员的视角带你看郑州

热门文章

  1. Vue按键修饰符:@keyup.enter
  2. vim autoformat php,Linux Vim代码格式化/美化插件vim-autoformat安装
  3. 用matlab实现用Bp神经网络对iris数据集进行分类(以及影响分类性能的参数条件)
  4. python 爬虫 ip池维护思路
  5. (ICPR 20) DIP: Distinctive 3D local deep descriptors
  6. python爬iptv直播源_GitHub - xkloveme/iptv-m3u: python 爬的直播源数据
  7. 递归算法到非递归算法的转换
  8. 理解矩阵、矩阵的现实意义(二)
  9. AES加密解密算法的C代码实现
  10. Matter理论介绍-通用-1-03:桥接器-数据结构