ROS2前置基础教程 | 小鱼教你用CMake依赖查找流程

本系列教程作者:小鱼
公众号:鱼香ROS
QQ交流群:139707339
教学视频地址:小鱼的B站
完整文档地址:鱼香ROS官网
版权声明:如非允许禁止转载与商业用途。

上面我们用g++、make、cmake三种方式来编译ros2的C++节点。用cmake虽然成功了,但是CMakeLists.txt的内容依然非常的臃肿,我们需要将其进一步的简化。

1.优化CMakeList.txt

将上面的CmakLists.txt改成下面的样子

cmake_minimum_required(VERSION 3.22)
project(first_node)

find_package(rclcpp REQUIRED)
add_executable(first_node first_ros2_node.cpp)
target_link_libraries(first_node rclcpp::rclcpp)

接着继续生成和编译

cmake ..
make

图片

是不是非常的神奇,为什么可以浓缩成那么短的几句指令呢?

2.find_package查找路径

find_package查找路径对应的环境变量如下。

<package>_DIR
CMAKE_PREFIX_PATH
CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH
PATH

打开终端,输入指令:

echo $PATH

结果

PATH=/opt/ros/humble/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

观察PATH变量,你会发现/opt/ros/humble/bin赫然在其中,PATH中的路径如果以binsbin结尾,则自动回退到上一级目录,接着检查这些目录下的

<prefix>/(lib/<arch>|lib|share)/cmake/<name>*/          (U)<prefix>/(lib/<arch>|lib|share)/<name>*/                (U)<prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/  (U)

cmake找到这些目录后,会开始依次找<package>Config.cmakeFind<package>.cmake文件。找到后即可执行该文件并生成相关链接信息。

打开/opt/ros/humble/share/rclcpp/cmake你会发现rclcppConfig.cmake就在其中。

3.总结

本节小鱼带你通过多种方式进行节点的编译,主要是让你了解C++编译工具cmake以及其路径查找规则,以后在学习生涯中再遇到undefined reference to xxxxx No such file or directory就再也不用慌张了。

ROS2前置教程汇总:

我因我们而存在,Ubuntu也有哲学意义

ROS2前置教程|在虚拟机中安装Ubuntu

ROS2前置教程 | 玩转Ubuntu之常用指令

ROS2前置教程|玩转Ubuntu之编程工具

ROS2前置教程 | 玩转Ubuntu之常用软件

ROS2前置基础教程 | 小鱼教你用g++编译ROS2节点

ROS2进阶教程汇总:

ROS2进阶教程| ROS2系统架构之操作系统打假

ROS2前置基础教程 | 使用CMakeLists.txt编译ROS2节点

猜你喜欢

转载自blog.csdn.net/qq_27865227/article/details/125338529