# 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 git@github.com:catkin/catkin_simple.git
cd $CATKIN_WS catkin_make 示例代码： https://github.com/simonlynen/catkin_and_catkin_simple 示例CMakelists 解释： https://github.com/catkin/catkin_simple/blob/master/README.md  1 cmake_minimum_required(VERSION 2.8.3) 2 project(foo) 3 4 find_package(catkin_simple REQUIRED) 5 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 11 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？？？
15
16
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
19
20 cs_install() //creates an installation rule for any libraries and executables you created with cs_ prefixed commands
21
22 cs_install_scripts(scripts/my_script.py)
23
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.
2
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编辑  收藏  举报