详细理解 :
catkin/CMakeLists.txt - ROS Wikihttp://wiki.ros.org/catkin/CMakeLists.txt
修改cmakelist的时候没有注意这一点,发现在修改的code不起作用,随后删掉devel以及build重新编译后rosrun找不到执行文件,执行文件在build下,冲浪之后发现是没有catkin_package()的原因,我想起来我是删了这句,由此记录一下学习一下:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
sensor_msgs
cv_bridge
message_filters#时间同步要用
pcl_conversions
pcl_ros
#message_generation
)
##这些环境变量可以稍后在 CMake 脚本中使用。 环境变量描述了包导出的头文件在
#哪里、源文件在哪里、包依赖的库以及这些库的路径。 名称始终遵循
#<PACKAGE NAME>_<PROPERTY> 的约定
在 catkin/CMakeLists.txt - ROS Wiki5.2 说到:Catkin 包并不是 catkin 的真正组件。 而是在 catkin 的设计中利用了 CMake 的组件功能,以节省大量的打字时间。catkin_ 前缀创建了一组环境变量<find_package()可以防止因为库没有包含的编译错误>
官网find_package查找包的方法是较为推荐的:这里又有区别了:
find_package(catkin REQUIRED COMPONENTS nodelet)
find_package(nodelet)
前者意味着 nodelet 导出的包含路径、库等也会附加到 catkin_ 变量中。 例如, catkin_INCLUDE_DIRS 不仅包含 catkin 的包含路径,还包含 nodelet 的包含路径!
后者 意味着 nodelet 路径、库等不会被添加到 catkin_ 变量中
而:
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS roscpp
DEPENDS eigen opencv
)
catkin_package() 是 catkin 提供的 CMake 宏。 这是为构建系统指定 catkin 特定信息所必需的,该信息又用于生成 pkg-config 和 CMake 文件。————>用于为catkin提供构建、生成pkg-config和CMake文件所需要的信息;catkin_package()的具体作用Extracted CMake API reference — catkin 0.5.89 documentationhttps://docs.ros.org/en/groovy/api/catkin/html/dev_guide/generated_cmake_api.html#catkin-packageIt installs the package.xml file, and it generates code for find_package and pkg-config so that other packages can get information about this package. For this purpose the information about include directories, libraries, further dependencies and CMake variables are used.
It must be called once for each package. It is indirectly calling``catkin_destinations()`` which will provide additional output variables. Please make sure to call catkin_package() before using those variables.
pkg-config:在用到第三方库的时候,pkg-config 指出头文件和库文件的位置
如果缺少了,就不会install package.xml,自然就不会在devel下生成对应的ros package了。