在CLion中调试ROS2_C++项目
环境
- ROS: Humble
- Ubuntu: 22.04
- CLion: 2024.2
准备工作
- 安装Ninja
sudo apt-get install ninja-build
- 工作区路径为/home/arlo/ros2_ws/,我们将这一文件层级称为
workspace-level folder
- package路径/home/arlo/ros2_ws/src/pkg01_hellowrld_cpp
在终端中构建工作区并生成编译数据库(Build a workspace in terminal and generate a compilation database)
为了能够在 CLion 中打开 ROS2 工作区,我们将使用 CMAKE_EXPORT_COMPILE_COMMANDS 这个CMake 标志生成一个 JSON 编译数据库( JSON compilation database)
命令执行在workspace-level folder
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja
构建完成后,ros2_ws\build 包含一个 compile_commands.json 文件
在已经被source后的环境中启动CLion(Launch CLion in the sourced environment)
- 在同一个终端,
source install/setup.bash
- 启动CLion
在CLion中打开工作区
- 在CLion中,
File->Open
选择刚才生成的compile_commands.json
- 选择
作为项目打开
改变项目的根目录
默认情况下,CLions 将包含 compile_commands.json
文件的目录视为项目根目录。在例子中,它是 build 目录。在 Project tree中,实际的源文件被标记为 external
为了获得正确的项目结构,我们需要将项目根目录设置为实际的 workspace 目录
- 打开
Tools->Compilation Database->Change Project Root
- 更改更目录到
workspace-level
如何构建一个package(How to build a package)
为了在 CLion 中构建并启动一个包,我们将为 colcon 构建期间实际执行的 CMake 命令创建一个自定义构建目标,然后为该目标创建自定义应用程序配置
为’colcon build’创建脚本
- 来到
ros2_ws/log/latest_build/pkg01_helloworld_cpp/
,复制command.log
里面的命令 - 在
在src/pkg01_helloworld_cpp/
下创建并粘贴命令到cmake_commands.sh
,然后修改权限chmod 777 cmake_commands.sh
- 修改
cmake_commands.sh
为以下内容,
1
2
3/usr/bin/cmake /home/arlo/ros2_ws/src/pkg01_helloworld_cpp -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja -DCMAKE_INSTALL_PREFIX=/home/arlo/ros2_ws/install/pkg01_helloworld_cpp
/usr/bin/cmake --build /home/arlo/ros2_ws/build/pkg01_helloworld_cpp -- -j32 -l32
/usr/bin/cmake --install /home/arlo/ros2_ws/build/pkg01_helloworld_cpp
创建自定义构建目标
- 打开
Settings->Build, Execution, Deployment->Custom Build Targets
点击+去添加一个新目标 - 设置工具链为,默认即可
- 点击
build
右边的三个点,在弹出的窗口里点击+去添加一个外部工具,选择刚刚创建的cmake_commands.sh
- 注意
working directory
,一定是ros2_ws/build/pkg01_helloworld_cpp
,此处存放构建后产生的文件
为自定义构建目标创建run/debug配置
为了能够构建并启动我们为包设置的目标,我们需要创建相应的配置
- 在主菜单,点击
Run | Edit Configurations
,点击然后选择Custom Build Application
,可执行文件选择ros2_ws/build/pkg01_hellowrold_cpp/hellowrold
,此处的可执行文件名应在CMakelist.txt
设置
开始Debug
- 打断点,点击小锤子构建
- 构建完成后,点击小虫子开始调试
- 若无法进行断点调试,在CMakelist.txt中加入
SET(CMAKE_BUILD_TYPE "Debug")
用CLion构建ros2 工作区
- 打开
File->Tools->External Tools
,点击+添加新的外部工具
- 实参填
build --symlink --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja
其他参数如下
- 构建工作区