环境
- Ubuntu 18.04
- VS Code 插件: C/C++
- ROS Melodic
- gcc, clang(可选)
工作目录
项目myproject文件夹位于~/catkin_ws/src/myproject
, 关于ROS catkin_ws工作空间的创建可以参考这里.
步骤
1. 构建并导出编译命令
- 确保当前.cpp源文件已被添加到项目文件夹下的CMakeLists.txt中,例如:
add_executable(node_name src/main.cpp)
如果有其它自定义头文件路径也可以一并设置,没有的可以略过(注意ROS头文件所在路径不需要在这里指定):
target_include_directories(node_name PUBLIC ${PROJECT_SOURCE_DIR}/include)
- 在
~/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
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编译器,不会影响最终编译时候所选择的编译器。
网友评论