解决VS Code下找不到ROS头文件和无法自动补全的问题

环境

  1. Ubuntu 18.04
  2. VS Code 插件: C/C++
  3. ROS Melodic
  4. gcc, clang(可选)

工作目录

项目myproject文件夹位于~/catkin_ws/src/myproject, 关于ROS catkin_ws工作空间的创建可以参考这里.

步骤

1. 构建并导出编译命令
  1. 确保当前.cpp源文件已被添加到项目文件夹下的CMakeLists.txt中,例如:

add_executable(node_name src/main.cpp)

如果有其它自定义头文件路径也可以一并设置,没有的可以略过(注意ROS头文件所在路径不需要在这里指定):

target_include_directories(node_name PUBLIC ${PROJECT_SOURCE_DIR}/include)

  1. ~/catkin_ws/src/myproject下执行下列命令导出编译命令(myproject需要修改为自己的项目名,或者删掉,构建catkin_ws下的所有项目。

catkin build [myproject] -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

或者,将set(CMAKE_EXPORT_COMPILE_COMMANDS ON)加入到自己项目文件的CMakeLists.txt文件中,然后执行,这样在每次构建时都会自动导出编译命令。

catkin build [myproject]

构建完成后,在~/catkin_ws/build/myproject/下会生成一个compile_commands.json文件,这个文件可以用来实现代码的自动补全功能.

2. VS Code 设置

在VS Code中 按下Ctrl+Shift+P打开主命令框,输入 C/C++: Edit configurations (UI),打开配置C/C++的UI界面。滚到最下方,展开Advanced Settings,在Compile command设置中输入如下内容(myproject需要修改成工程文件夹名,或者直接输入上一步生成的compile_commands.json文件的绝对路径):

${workspaceFolder}/../../build/[myproject]/compile_commands.json

Screenshot from 2020-08-22 22-04-00.png
3. 重启VS Code

重启VS Code,或者Ctrl+Shift+P打开主命令框输入 Developer: Reload Window

4. 效果

最终效果如下,可以看到头文件可以被找到,并且可以给出自动补全。(如果这一步仍然提示找不到头文件,但是可以实现自动补全,检查一下是否有其它C++插件在工作,例如clangd, C++ Intellisense 等)


Screenshot from 2020-08-22 23-36-00.png

使用Clang提供自动补全(可选)

Clang编译器提供的自动补全功能一般更友好一些,比如,如果上述步骤默认采用gcc编译器,ROS_INFO仍存在警告提示,而且不能自动补全Ros::Rate等一些类,而Clang没有这些问题。使用Clang编译器的配置如下:


Screenshot from 2020-08-22 23-39-20.png

上面文件可以 Ctrl + Shift +P 输入C/C++: Edit configurations (JSON)打开,注意这个文件和之前使用的C/C++: Edit configurations (UI) 是自动同步的,修改一处即可。
没有安装Clang的话需要sudo apt install clang
注意:这些设置只保证自动补全功能使用Clang编译器,不会影响最终编译时候所选择的编译器。

你可能感兴趣的:(解决VS Code下找不到ROS头文件和无法自动补全的问题)