# 3.使用CMakeLists.txt编译ROS2节点 虽然通过make调用Makefile编译代码非常的方便,但是还是需要我们手写gcc指令来编译,那有没有什么办法可以自动生成Makefile呢? 答案是有的,那就是cmake工具。 **cmake通过调用CMakeLists.txt直接生成Makefile。** ## 1.安装Cmake ```shell sudo apt install cmake ``` ## 2.新建CMakeLists.txt 在`d2lros2/d2lros2/chapt2/basic`新建`CMakeLists.txt`,输入下面内容。 ```cmake cmake_minimum_required(VERSION 3.22) project(first_node) #include_directories 添加特定的头文件搜索路径 ,相当于指定g++编译器的-I参数 include_directories(/opt/ros/humble/include/rclcpp/) include_directories(/opt/ros/humble/include/rcl/) include_directories(/opt/ros/humble/include/rcutils/) include_directories(/opt/ros/humble/include/rcl_yaml_param_parser/) include_directories(/opt/ros/humble/include/rosidl_runtime_c/) include_directories(/opt/ros/humble/include/rosidl_typesupport_interface/) include_directories(/opt/ros/humble/include/rcpputils/) include_directories(/opt/ros/humble/include/builtin_interfaces/) include_directories(/opt/ros/humble/include/rmw/) include_directories(/opt/ros/humble/include/rosidl_runtime_cpp/) include_directories(/opt/ros/humble/include/tracetools/) include_directories(/opt/ros/humble/include/rcl_interfaces/) include_directories(/opt/ros/humble/include/libstatistics_collector/) include_directories(/opt/ros/humble/include/statistics_msgs/) # link_directories - 向工程添加多个特定的库文件搜索路径,相当于指定g++编译器的-L参数 link_directories(/opt/ros/humble/lib/) # add_executable - 生成first_node可执行文件 add_executable(first_node first_ros2_node.cpp) # target_link_libraries - 为first_node(目标) 添加需要动态链接库,相同于指定g++编译器-l参数 # 下面的语句代替 -lrclcpp -lrcutils target_link_libraries(first_node rclcpp rcutils) ``` ## 3.编译代码 我们一般会创建一个新的目录,运行cmake并进行编译,这样的好处是不会显得那么乱。 ```shell mkdir build cd build ``` 创建好文件夹,接着运行cmake指令,`..`代表到上级目录找`CMakeLists.txt`。 ``` cmake .. ``` 运行完cmake你应该可以在build目录下看到cmake自动生成的Makefile了,接着就可以运行make指令进行编译 ``` make ``` 运行完上面的指令,就可以在build目录下发现`first_node`节点了。 ![image-20220603143016936](3.使用CMakeLists.txt编译ROS2节点/imgs/image-20220603143016936.png)