VSCode 配置 Clang 进行 C/C++ 开发
VSCode Linux C/C++ 配置 Clang 编译调试工具链
WSL 的安装以及安装 Linux 发行版
这一步可参考 Windows 的 WSL2 安装文档.
在发行版的选择上选择了 ArchLinux
ArchLinux 上工具的安装
更新系统软件:
sudo pacman -Syyu
安装 LLVM:
sudo pacman -S llvm clang clangd lld lldb libc++
VSCode 插件安装
- Remote-WSL: 远程连接 WSL 进行 Linux C/C++ 开发
在 WSL 上安装:
- Clangd
- CodeLLDB
- Clang-Format
- CMake
- CMake Tools
文件目录设置
在个人目录下新建一个 Cpp 专用的文件夹 Cpp,在 Cpp 文件夹下再新建 Cpp_Single 和 Cpp_Multiple 。这里暂时只配置单文件编译调试(已经覆盖了学习的大部分场景)。
在 Cpp_Single 下创建 .vscode 文件夹,在.vscode 中新建 3 个文件:
- lauch.json
- tasks.json
- setting.json
lauch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "lldb", // 配置类型,不同编程语言不同,该项由CodeLLDB插件提供
"request": "launch", // 可以为launch(启动)或attach(附加)
"program": "${fileDirname}/build/${fileBasenameNoExtension}", // 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空
"cwd": "${fileDirname}", // 调试程序时的工作目录,此为工作区文件夹;
"internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”
"console": "integratedTerminal",
"MIMode": "lldb", // 指定连接的调试器,可以为gdb或lldb,因为使用llvm工具链,所以使用lldb
"miDebuggerPath": "/usr/sbin/lldb", // lldb调试器路径,通过在终端输入 which lldb 命令得到
"setupCommands": [
{
"description": "Enable pretty-printing for lldb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "Build C++" // 调试前执行的任务,一般为编译程序。与tasks.json的label相对应
}
]
}
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Build C++", // 任务名称,与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}/build/${fileBasenameNoExtension}", // 指定编译生成结果(.out文件和.out.dSYM文件夹)
"-Wall", // 开启额外警告
"-std=c++20" // 使用的C++标准,这里是C++20,C语言改成"-std=c11"
], // 编译的命令
"group": {
"kind": "build",
"isDefault": true
},
"options": {
"cwd": "${fileDirname}"
}
}
]
}
其他设置
- 格式化:Clang-Format 设置使用 Google 规范
- clangd 的一些设置:
"clangd.arguments": [
"--background-index",
"--compile-commands-dir=build",
"-j=12",
// "--folding-ranges",
"--query-driver=/usr/bin/clang++",
"--clang-tidy",
"--all-scopes-completion",
"--completion-style=detailed",
"--function-arg-placeholders",
"--header-insertion=iwyu",
"--pch-storage=memory",
],
调试注意
在需要调试的文件的同级目录下建立一个 **build** 文件夹,否则调试会报错!