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
文档夹存放cmake
和make
相关的文档,devel
文档夹存放编译生成的文档和目标,包括setup.sh
。
INSTALL
现在执行INSTALL
命令不再是sudo make install
了,而是catkin_make install
,它相当于:
12345 |
cd ~/catkin_ws/build# If cmake hasn‘t already been calledcmake ../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../develmake大专栏 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的头文档和库:
12345678 |
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
中生成可执行文档
原文地址:https://www.cnblogs.com/liuzhongrong/p/12000152.html