WSL+LLVM+Clangd的C++环境配置

  1. 安装WSL

    安装 WSL | Microsoft Learn

  2. 换源(以Ubuntu22为例)

    1
    2
    sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
    sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
  3. 更新软件包

1
2
sudo apt-get update
sudo apt-get upgrade
  1. 安装LLVM、Clang、Clangd

    1
    2
    3
    sudo apt install llvm
    sudo apt install clang
    sudo apt install clangd

    安装好后如图

  2. 输入code .打开VScode,安装clangd, LLVM两个插件

  3. 调试后会自动创建launch.json文件,输入以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    {
    // 使用 IntelliSense 了解相关属性。
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
    "name": "(lldb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
    "type": "lldb", // 配置类型,不同编程语言不同,该项由CodeLLDB插件提供
    "request": "launch", // 可以为launch(启动)或attach(附加)
    "program": "${fileDirname}/${fileBasenameNoExtension}.out", // 将要进行调试的程序的路径
    "args": [], // 程序调试时传递给程序的命令行参数,一般设为空
    "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
    "cwd": "${fileDirname}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
    "environment": [], // 环境变量
    "externalConsole": false, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端
    "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb/lldb手动输命令吧?
    "MIMode": "lldb", // 指定连接的调试器,可以为gdb或lldb,因为使用llvm工具链,所以使用lldb
    "miDebuggerPath": "/usr/bin/lldb", // lldb调试器路径,通过在终端输入 which lldb 命令得到
    "setupCommands": [
    { // 模板自带,好像可以更好地显示STL容器的内容
    "description": "Enable pretty-printing for lldb",
    "text": "-enable-pretty-printing",
    "ignoreFailures": false
    }
    ],
    "preLaunchTask": "Compile" // 调试前执行的任务,一般为编译程序。与tasks.json的label相对应
    }
    ]
    }
  4. 调试后会自动生成task.json, 输入以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    {
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
    {
    "label": "Compile", // 任务名称,与launch.json的preLaunchTask相对应
    "type": "process", // 可以为process或shell
    "command": "clang++", // 要使用的编译器,C语言用clang
    "args": [
    "${file}",
    "-g", // 生成和调试有关的信息, 如果加上该参数,编译后不仅会生成.out可执行文件,还会生成后缀为.out.dSYM的文件夹,如果不加,调试器会忽略你设的断点
    "-o", // 指定输出文件名,os X和Linux下不加该参数则默认输出a.out,win下默认a.exe
    "${fileDirname}/${fileBasenameNoExtension}.out", // 指定编译生成结果(.out文件和.out.dSYM文件夹)
    "-Wall", // 开启额外警告
    "-std=c++17", // 这里采用c++17标准(推荐),C语言改成"-std=c11"
    ], // 编译的命令,其实相当于VSC帮你在终端中输了这一串东西
    "group": {
    "kind": "build",
    "isDefault": true // 不为true时command shift B快捷键就要手动选择了
    },
    "options": {
    "cwd": "${fileDirname}"
    },
    "presentation": {
    "echo": true,
    "reveal": "always", // 执行任务时是否跳转到终端面板,可以为always,silent,never。具体参见VSC的文档,即使设为never,手动点进去还是可以看到
    "focus": false, // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义
    "panel": "shared" // 不同的文件的编译信息共享一个终端面板
    }
    }
    ]
    }
  5. 保存后即可正常使用调试功能

  6. 按住CTRL键可定位头文件和函数


WSL+LLVM+Clangd的C++环境配置
https://hualinli.github.io/2022/11/02/WSL-LLVM-Clangd的C-环境配置/
作者
Lihualin
发布于
2022年11月2日
许可协议