在 vscode 中配置 clangd 来进行南大 PA 实验

我真的是太喜欢 vscode 了,所以几乎任何项目都想用 vscode 来开发。clangd 相比官方的 C/C++ 插件不仅速度更快,而且提示也更智能。所以 vscode + vim 插件 + clangd 现在是我的 c++ 开发首选。

由于南大 PA 的讲义并没有教我们配置任何 IDE 来进行开发,只是推荐我们使用原生 vim,这就给了我们很大的自由,来选择自己想要的开发工具。

本文介绍的是如何配置 vscode 和 clangd 来进行南大 PA 的实验。

南大 PA 是在 ubuntu 上进行开发,不过既然我们都使用了虚拟机和 vscode,那么就没必要在虚拟机里运行 vscode 了,可以直接在 windows 上运行 vscode,然后通过 ssh 连接虚拟机进行开发。

关于如何设置虚拟机来进行 ssh 连接可以参考:宿主机SSH连接VMware虚拟机(NAT模式)

vscode 里需要安装 clangd 插件。注意要选择在远程主机中安装。

如果已经安装了 vscode 官方的 C/C++ 插件,需要将其禁用,因为它会和 clangd 发生冲突。

ubuntu 中也需要安装 clangd:

1
sudo apt install clangd

clangd 在启动的时候会在项目根目录查找 compile_commands.json 文件,来索引整个项目的源文件。

这个文件在 cmake 下可以通过添加编译参数 -DCMAKE_EXPORT_COMPILE_COMMANDS=True 来自动生成。但是南大 PA 使用的是 Make 来管理项目,就需要用到 bear 这个软件来生成。

安装 bear:

1
sudo apt install bear
注意
如果你此时还没获取 PA 的代码,请先回到讲义。当进行到 Compiling and Running NEMU 这一章,并且成功执行 make 指令,编译运行完 NEMU 之后再回来。

南大 PA 代码其实是由好几个子项目(每一个子项目都是一个子目录)组成的。每一个子项目都由自己的 Makefile 管理。因此需要将 vscode 在子目录中打开:

1
code nemu/

这里只以 NEMU 为例,后面对于不同的子项目,都需要单独用 vscode 打开,然后生成单独的 compile_commands.json 文件。

接下来使用 bear 来生成 compile_commands.json 文件:

1
bear -- make

执行完该指令后,根目录里就会自动生成 compile_commands.json 文件,内容大致如图:

/setup-clangd-for-nju-icspa/image.png

接着关闭 vscode 再打开,clangd 就可以正常运作了。

/setup-clangd-for-nju-icspa/image-1.png

如上图所示,会实时进行报错提示。头文件下下方有下划线,代表可以索引到头文件,按下 ctrl 点击头文件就可以进行跳转。

祝大家在 PA 里玩得愉快!