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

详细理解 :
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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CMake Error是在使用CMake构建ROS项目时可能遇到的错误之一。该错误通常表示CMake无法找到所需的软件包配置文件。根据提供的引用内容,错误信息显示CMake无法找到名为"common"和"geographic_msgs"的软件包配置文件。 要解决这个问题,你可以尝试以下几个步骤: 1. 确保你已经正确安装了所需的软件包。在ROS,你可以使用以下命令来安装软件包: ``` sudo apt-get install ros-<distro>-<package-name> ``` 其,`<distro>`是你正在使用ROS发行版,`<package-name>`是你需要安装的软件包名称。 2. 确保你的工作空间包含了所需的软件包。在ROS,你需要将软件包放置在工作空间的`src`目录下,并使用`catkin_make`命令进行构建。 3. 如果你已经安装了所需的软件包,但CMake仍然无法找到配置文件,可能是因为配置文件没有正确安装或者没有在CMake的搜索路径。你可以尝试使用以下命令来查配置文件的位置: ``` rospack find <package-name> ``` 这将返回软件包的路径。然后,你可以将该路径添加到CMake的搜索路径,以便CMake能够找到配置文件。 4. 如果以上步骤都没有解决问题,你可以尝试重新构建你的工作空间。首先,删除工作空间的`build`和`devel`目录,然后重新运行`catkin_make`命令。 请注意,具体的解决方法可能因你的具体情况而有所不同。如果你能提供更多的上下文信息,我可以给出更准确的建议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值