catkin_simple 的使用

Catkin simple 可用于规范catkin package, 并简化CMakeLists 

  • Dependencies are just listed once as build-depend in the package.xml, not also as run-depend etc.
  • Dependencies 无需在 CMakeLists.txt 中列出
  • Explicit linking of dependencies is not needed anymore (e.g. no target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES}) needed)
  • Explicit inclusion of catkin include not needed anymore (e.g. no include_directories(${catkin_INCLUDES}) needed)
  • Export and installation commands are both one-liners.


cd $CATKIN_WS/src
git clone


示例CMakelists 解释:

 1 cmake_minimum_required(VERSION 2.8.3)
 2 project(foo)
 4 find_package(catkin_simple REQUIRED)
 6 catkin_simple(ALL_DEPS_REQUIRED) //调用 catkin_simple,call package.xml中的所用build_depend,并do find_package(...)操作
 7                     //当所有的package 成功找到,a list of "catkin build dependencies"出现,并传给find_package(catkin REQUIRED COMPONETS...) 
 8                     //然后增加local include 和 catkin include 目录,并传给include_directories(...)
 9                      //最后发现并编译ROS messages,services and actions which in msg/src/action 文件夹,注意当且仅当package.xml中build_depend 包含message_generation才执行该操作
10                     //同样查找并编译dynamic_reconfigure 文件in cfg文件夹,注意当且仅当build_depend 包含dynamic_reconfigure
12 cs_add_library(my_lib src/my_lib.cpp) //首先call directly through to add_library
13                        //然后call target_link_libraries(my_lib ${catkin_LIBRARIES})去链接新库(注意build_depend需要包含新库)
14                        //最后it does some bookkeeping so that your library target can be implicitly used later???
17 cs_add_executable(my_exec src/main.cpp)//calls CMake's add_executable(...) instead.
18 target_link_libraries(my_exec my_lib)   //注意这句话需要写出来 there is no way to enforce order of target creation. The executable is still automatically linked against the catkin libraries
20 cs_install() //creates an installation rule for any libraries and executables you created with cs_ prefixed commands
22 cs_install_scripts(scripts/ 
24 cs_export() //calls catkin_package(...) under the hood, extending that call with any libraries created and catkin_depends found automatically with catkin_simple


1 There are several known assumptions and incorrect behaviors in catkin_simple which are a result of the trade-off of correctness for convenience.
3 There is no warning when a catkin package is not found during find_package.
4 There is over linking, as all libraries of all dependencies are linked against all targets indiscriminately.
5 Assumes that the include folder is meant to be in the include path.
6 If new .msg or .srv files are added, they will not be detected until you force CMake to run again
7 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.


posted @ 2016-09-05 12:48  之介  阅读(4605)  评论(0编辑  收藏  举报