上面我们用g++、make、cmake三种方式来编译ros2的C++节点。用cmake虽然成功了,但是CMakeLists.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
是不是非常的神奇,为什么可以浓缩成那么短的几句指令呢?
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
中的路径如果以bin
或sbin
结尾,则自动回退到上一级目录,接着检查这些目录下的
<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.cmake
或Find<package>.cmake
文件。找到后即可执行该文件并生成相关链接信息。
打开/opt/ros/humble/share/rclcpp/cmake
你会发现rclcppConfig.cmake
就在其中。
本节小鱼带你通过多种方式进行节点的编译,主要是让你了解C++编译工具cmake以及其路径查找规则,以后在学习生涯中再遇到undefined reference to xxxxx
和No such file or directory
就再也不用慌张了。
技术交流&&问题求助:
QQ交流群:139707339
版权保护:已加入“维权骑士”(rightknights.com)的版权保护计划