ROS中catkin_make install的用法
ROS中catkin_make install的用法
首先catkin_make install 的作用是:创建一个可以运行,但不含源码的工程包,以便于给客户等其他人使用,但同时不至于泄露源码的这么一个作用。参考这篇。
同时提一嘴,个人感觉,catkin_make install 和 cmake install 不是一个作用。关于cmake install 在这篇博客中说到:cmake install 是将 make 生成的文件安装到系统的对应目录中,比如从github上下载下来一个依赖库的安装包,解压后经过上面几步,该依赖库的对应头文件和库文件就安装到系统中了。(如果理解有误欢迎留言指正!)
catkin_make的原理
利用cmake的编译的话,主要分两步:(预编译 编译 汇编 链接)
1.cmake指令依照你写的CMakeLists.txt生成makefiles文件
2.make指令依照makefiles编译链接生成可执行文件
其中makefiles内容大概是这样的:
就是相当于一个简化版的gcc编译配置文件,但是只用makefiles的话就需要处理一个很麻烦的问题:makefiles在不同平台下会有不同的格式。cmake的应用就可以解决这个问题。
catkin_make是在cmake与make基础之上再简化了一遍,相当于做了一个封装的指令工具,规范了工作路径与生成文件路径。规定的路径如下:
#基本路径
Base path: /home/user/catkin_ws
Source space: /home/user/catkin_ws/src
Build space: /home/user/catkin_ws/build
Devel space: /home/user/catkin_ws/devel
Install space: /home/user/catkin_ws/install
如果使用catkin_make的话,就只需要执行一句话就可以完成上面cmake的2条指令。
# 在一个CMake项目里
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make install # (可选)
# 在一个catkin工作空间里
$ catkin_make
$ catkin_make install # (可选)
catkin_make install指令学习记录
这里的学习主要参考这篇博客(找遍了很多地方,能和我需要的相关的就只找到这一篇)
主要内容是,需要编辑CMakeLists.txt文件,让catkin_make指令能找到你对需要创建的install包的要求。
#############
## Install ##
#############
# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
## Mark executable scripts (Python etc.) for installation
## 添加python程序.in contrast to setup.py, you can choose the destination
install(PROGRAMS
scripts/talker.py
scripts/listener.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
## 添加可执行文件或者库文件,Mark executables and/or libraries for installation
install(TARGETS talker_node listener_node
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
## 添加头文件.Mark cpp header files for installation
install(DIRECTORY include/${PROJECT_NAME}/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
FILES_MATCHING PATTERN "*.h"
PATTERN ".svn" EXCLUDE
)
## 添加资源文件的目录,例如文件夹:urdf mesh rviz,其下的所有子目录的文件也会安装到相应的目录下.
install(DIRECTORY model
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
install(DIRECTORY urdf
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
install(DIRECTORY mesh
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
install(DIRECTORY rviz
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
## 添加资源文件.Mark other files for installation (e.g. launch and bag files, etc.)
install(FILES
launch/bringup.launch
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch
)
或者也可以把launch文件全部打包到launch文件夹中,利用
install(DIRECTORY model
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
来完成添加。
在每个package里把CMakeLists.txt修改完之后,执行catkin_make install指令,就会在文件夹里生成一个install文件夹:
然后把install
文件夹分享给其他人就可以咯!
可以直接把在单独的install里source
,并运行节点。