在devel下rosrun找不到执行文件而是在build下找到了:find_package()与catkin_package()使用

本文介绍了在修改CMakeLists.txt时遇到的问题,特别是catkin_package()缺失导致的rosrun无法找到执行文件。重点讲解了catkin_package的作用,包括环境变量设置、包信息提供和pkg-config支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

详细理解 :
catkin/CMakeLists.txt - ROS Wikiicon-default.png?t=M3K6http://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 documentationicon-default.png?t=M3K6https://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了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值