catkin_make及cmakelists分析

catkin_make编译时,对工作空间所有packages的编译顺序是按拓扑遍历的,不是按字母也不是按创建时间。

单独编译某个package

以前一直认为单独编译某个package的命令是catkin_make --pkg package1,结果这样仍然会将工作空间中所有package的CMakeLists全检查一遍,花费时间相当长,实际的命令是这个:

1
catkin_make -DCATKIN_WHITELIST_PACKAGES="package1;package2"

可以编译一个或多个package,但是执行这个命令之后再catkin_make回发现它仍然只编译上次的package。恢复成编译所有package去掉引号里面的内容就行:

1
catkin_make -DCATKIN_WHITELIST_PACKAGES=""

build文档夹存放cmakemake相关的文档,devel文档夹存放编译生成的文档和目标,包括setup.sh

INSTALL

现在执行INSTALL命令不再是sudo make install了,而是catkin_make install,它相当于:

1
2
3
4
5
cd ~/catkin_ws/build
# If cmake hasn't already been called
cmake ../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel
make
大专栏  catkin_make及cmakelists分析ne">make install

这样执行完以后,工作空间会出现一个install文档夹,里面存放着编译生成的库文档,问题是它会把所有package的install都进行处理,如果想改变这个目录的位置,执行catkin_make -DCMAKE_INSTALL_PREFIX=path install。另外在CMakeLists中指定安装目录用SET(CMAKE_INSTALL_PREFIX < install_path >)

结果会在share/status_panel/cmake中生成两个cmake文档

这两个文档是做依赖包时必需的,比如roscpp就有相应的文档

链接ROS库

如果想使用ROS的头文档,必须在CMakeLists里加入下面内容,也就是链接ROS的头文档和库:

1
2
3
4
5
6
7
8
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
find_package(roscpp)
target_link_libraries(foo
${catkin_LIBRARIES}
)

别忘了target_link_libraries在add_excutable之后。用message函数可以看到include文档夹和libraries文档夹如下:

在CMakeLists中加入catkin_package()才能在执行catkin_make后,才能在devel/lib中生成可执行文档

扫描二维码关注公众号,回复: 8098331 查看本文章

猜你喜欢

转载自www.cnblogs.com/liuzhongrong/p/12000152.html
今日推荐