Linux下使用VScode开发ROS时clangd插件的使用

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Linux下使用VScode开发ROS时clangd插件的使用

本人在最近刚开始接触Linux和ROS开发在开发过程中发现微软的C/C++的intelliSense的代码补全纠错等功能是真的难用恰好有学长跟我提起了clangd这个东西而且以前用clion去写一些小的C/C++工程想着怎么去配置一下在vscode上使用clangd让自己写代码更舒服一些主要是太懒了于是就有了这篇文章。

由于本人是初学者懂的东西很少折腾了一天只是能做到能用clangd的一些功能。可能文章中也有些错误和术语使用错误敬请各位指出能给我一个学习改进的机会。

1.首先安装Vscode就不多说了也有很多博客去安装教学。

2.配置ROS

ROS的配置部分由于我是跟随B站上的教程学习的可以直接移步教程链接如下
【Autolabor初级教程】ROS机器人入门

2.1 下载插件(已安装好VScode)

2.1.1 C/C++

此插件就是上文提到的微软的C/C++我们虽然使用他的intelliSense的代码补全纠错等功能但是他是ROS插件的依赖项是ROS插件必不可少的一项
在这里插入图片描述

2.1.2 Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code

此插件对于新手来说比较友好是一个汉化插件如果英语好可以不用QAQ
在这里插入图片描述

2.1.3 CMake Tools

此插件不用多说CMake
在这里插入图片描述

2.1.4 Python

也是ROS插件的依赖项之一必不可少而且ROS是支持C++和Python开发的
在这里插入图片描述

2.1.5 ROS

ROS插件本身需要你提前已经安装好了ROS的任意版本这个安装方式上方链接也有
在这里插入图片描述

2.1.6 注意

此处只是配置ROS所以先不安装插件clangd冲突弹窗很烦人0.0

3.安装llvm+clang

直接在GitHub上有Releases可以直接下载编译好的包
llvm/llvm-project

在此处找到Releases

在这里插入图片描述

点进去之后我下载的是

在这里插入图片描述

注意
可以点击下载但是速度一言难尽啊可以吧鼠标放在蓝字(就是上图箭头指向的蓝字)上右键获取下载网址找到代理网站下载
代理网站网址奉上,点击蓝字进入把刚才复制进来的网址输入进去下载即可
GitHub Proxy
在这里插入图片描述

解压

下载后找到下载的目标目录(一般都是Downloads)

tar -xf clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz
mkdir llvm
mv clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04 llvm

或者直接将压缩包移动到llvm目录下再解压

设置环境变量

在主目录中按下Ctrl+H (显示隐藏文件)找到.bashrc右键编辑在最后加上
export PATH="/home/wang/Downloads/llvm/clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04/bin:$PATH"

保存关闭双引号内就是刚才解压的文件夹中的bin目录所在路径可以在bin目录下打开终端使用pwd获取路径

打开终端运行命令source .bashrc刷新环境变量

查看是否安装成功

打开终端输入clang --version,有版本说明即安装成功

注意上述文件名称目录路径均按照我的电脑而来如果下载不同版本的llvm在解压的时候记得改一下名称并且设置环境变量的时候最好用pwd获取路径因为我直接安装在了Downloads目录下了

也可以直接apt下载但是他是安装的10版本的但是一些重要功能都是在10版本之后出的所以就不做过多的赘述了

4.配置VScode使用clangd

关于如何去在VScode中使用clangd开发ROS需要达成以下几点
1.解决微软的C/C++的intelliSense与clangd的冲突
2.配置编译指令使生成compile_commands.json文件

4.1 安装插件clangd

在这里插入图片描述

4.2 解决微软的C/C++的intelliSense与clangd的冲突

由于微软的C/C++的intelliSense与clangd的作用都是代码补全、纠错等功能所以在使用时是有冲突的但是我们又不能卸载插件C/C++因为他是ROS插件的依赖项所以需要解决冲突
实际上安装完clangd插件之后VScode左下角会弹窗描述该问题
在这里插入图片描述

这时我们只需点击Disable IntelliSense即可

4.3 配置编译指令使生成compile_commands.json文件

4.3.1 compile_commands.json

compile_commands.json文件是使用clangd的一个重要文件。
VScode的官网插件clangd的官方文档中有描述

要理解源代码clangd需要知道构建标志。

默认情况下clangd将假设您的代码构建为clang-some_file.cc您可能会收到关于缺少#included文件等错误。

compile_commands.json编译命令.json#

此文件为项目中的每个源文件提供编译命令。它通常由工具生成。

clangd将查找您编辑的文件的父目录以及名为build/的子目录。例如如果编辑 S R C / g u i / w i n d o w . c p p 我们将在 SRC/gui/window.cpp我们将在 SRC/gui/window.cpp我们将在SRC/gi/、 S R C / g u i d / b u i l d / 、 SRC/guid/build/、 SRC/guid/build/SRC/、$SSRC/build/…

所以想要clangd能够在开发过程中能够找到#include文件和正常使用代码补全等功能我们需要生成compile_commands.json文件

4.3.2 修改cmake指令以生成compile_commands.json文件

在官方文档中这样描述了使用CMake构建的项目的compile_commands.json文件生成方式
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1
但是ROS中使用的不是CMake而是将cmake与make的编译方式做了一个封装的指令工具catkin_make

所以我们在编译的时候使用指令catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1即可
如果我们使用的是在上述ROS教程中的配置tasks.json去用快捷键Ctrl+Shift+B去编译源代码则需要将tasks.json改成以下形式

{
	// 有关 tasks.json 格式的文档请参见
		// https://go.microsoft.com/fwlink/?LinkId=733558
		"version": "2.0.0",
		"tasks": [
			{
				"label": "catkin_make:debug", //代表提示的描述性信息
				"type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令如果是process代表作为一个进程来运行
				"command": "catkin_make",//这个是我们需要运行的命令
				"args": ["-DCMAKE_EXPORT_COMPILE_COMMANDS=1"],//如果需要在命令后面加一些后缀可以写在这里比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
				"group": {"kind":"build","isDefault":true},
				"presentation": {
					"reveal": "always"//可选always或者silence代表是否输出信息
				},
				"problemMatcher": "$msCompile"
			}
		]
	}
4.3.2.1 如何生成tasks.json文件

如果没有tasks.json文件使用快捷键Ctrl+Shift+B调用编译后选择catkin_make:build一项点击后方小齿轮即可。

5.使用clangd

1.当我们按照上述方法配置好之后在一个新的工作空间编写程序时仍然会出现#include 报错的情况那是因为我们还未编译文件需要创建一个cpp文件修改CMakeLists.txt文件后编译一下生成compile_commands.json文件

注意由于compile_commands.json文件的生成需要检测到实际的编译过程所以当出现#include报错的情况可以尝试编译一下

2.但是此时打开以前的工程即未配置clangd之前就已经写完的工程仍会出现#include报错的情况那是因为检测不到实际的编译过程可以再终端中先使用命令catkin_make clean后再进行编译

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux