搭建 WSL + VSCode + Clangd 开发环境

前言

随着 Windows 生态越来越开放和完善,WSL 对开发者的吸引力也越来越强,一些本来习惯 MacOS 等类 Unix 系统的开发者也开始尝试转向在 WSL 中开发,以此同时享受到 Windows 的多样性和类 Unix 系统的便利性。

笔者目前的开发设备是一台公司配备的 MacOS 笔记本和个人的 Windows 笔记本,工作事务用公司电脑处理,私人事务用自己的电脑。工作之余也偶尔学习一些东西,写写笔记,这就带来一个问题:用公司电脑输出的个人内容如何完全掌握在个人手中,要知道的是,目前各大互联网公司对工作数据安全的要求都是非常严格的,通常禁止将工作电脑上的数据传输到外部设备。

笔者对于这种要求表示理解,但也颇为无奈,只好彻底将个人数据和工作数据彻底物理隔离。除工作以外的任何事物,全部都用私人电脑处理,包括阅读的书籍、论文、读书笔记、私人代码等等。虽然有点麻烦,但彻底免除了后顾之忧。

搭建流程

  1. 安装 WSL

时值 2022 年,安装 WSL 已经非常简单了。只需要在微软应用商店搜索你想要的 Linux 发行版,点击安装即可。安装成功后,打开命令行验证一下:

1
2
3
(base) PS C:\Windows\system32> wsl -l
适用于 Linux 的 Windows 子系统分发版:
Ubuntu-20.04 (默认)
  1. 安装 VSCode

这个也是有手就行,在 VSCode 官网 下载适配你处理器版本的安装包安装就可以了。

  1. 在 WSL 上安装 Clangd

笔者曾写过一篇如何在 AliOS 上安装 Clangd 的博客,费尽周折。但在 WSL 中安装 Clangd 简直就是轻而易举,一条命令轻松搞定。

1
sudo apt install clang-12 clangd-12 llvm-12 liblldb-12-dev

理想很丰满,现实很骨感。当你敲下命令的同时可能会发现,下载速度居然只有 10+kb/s,这得下到猴年马月。你可以 Google 搜索给 WSL 设置代理,笔者之前这样搞过,感觉比较繁琐。因此采用了一种更彻底的解决方案,即软路由科学上网,彻底摆脱各种繁琐的设置,享受畅快的上网体验,具体内容将会在下一篇博客中详细介绍。

安装成功后,直接输出 clangd 命令可能会报 command not found,这是因为我们安装的是 clangd-12 版本,因此需要将 /usr/bin 目录下的 clangd-12 软连接修改为 clangd ,否则 VSCode Clangd 插件会找不到命令,具体操作为:

1
2
cd /usr/bin
sudo mv clangd-12 clangd
  1. 在 VSCode 中安装 WSL,Clangd 插件

这一步也非常简单

  1. 找个 C++ 项目试一下

笔者选择了 leveldb ,Jeff Dean 大神写的 KV 数据库,非常值得学习

注意:cmake 编译时要添加 -DCMAKE_EXPORT_COMPILE_COMMANDS=1 选项,这样会在 build 目录中生成 compile_command.json 文件,供 clangd 生成索引。

1
2
3
git clone --recurse-submodules https://github.com/google/leveldb.git
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .. && cmake --build .
  1. 配置 VSCode Clangd 参数

将以下参数 写入 settings.json 即可

1
2
3
4
5
6
7
8
    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}/build",
        "-j=8",
        "--background-index",
        "--clang-tidy",
        "--log=verbose",
        "--pretty",
    ],

随便打开一个 cpp 文件,clangd 就会开始构建索引,实测对于 leveldb 这种小项目,不到 1 分钟构建完毕。

接下来就是愉快的 leveldb 学习之旅了,祝旅途愉快。

创刊词

入职半年有余,笔者曾经信誓旦旦要像很多互联网大神一样,把自己学过的东西、经历过的事,取其精华记录在案,一来作为自己学习总结的一种手段,二来作

Install clangd in alios 7

clangd 是一款 C/C++ language server,可以很方便地进行代码跳转、提示、补全等,本文总结在 alios 7 上安装 clangd 的一些经验 根据 clangd 官网安装指南,有 3 种方式安装 clan