非学无以广才,非志无以成学。
一、目的
本文主要介绍在windows平台上使用WSL环境,基于LLVM工具链结合clangd代码分析,配置C/C++开发环境,在 VScode 上使用 clang 编译 、LLDB 调试和clangd自动补全可以提高编程效率。本文记录了笔者使用VS Code开发的配置环境,供大家参考。
二、WSL环境
在windows下建议安装WSL环境,可以自行google,安装比较简单的。 笔者使用WSL的ArchLinux系统。如何安装WSL+ArchLinux这里不赘述,可参考链接。
Win10平台安装WSL方法
ArchWSL下载与配置
三、VS Code插件配置
-
在本地安装Remote - WSL插件连接ArchLinux系统
-
vscode连接ARCH后,在WSL:ARCH环境安装clangd、CodeLLDB、CMake、CMake Tools、Doxygen Documentation Generator插件。
-
注意在安装CodeLLDB的时候会报错,vscode会跳出链接,手动下载codelldb-x86_64-linux.vsix。在vscode调出命令窗口安装codelldb,windows平台快捷键ctrl+shift+p,选择Extensions: install from VSIX,选择刚刚下载的codelldb-x86_64-linux.vsix进行安装。
三、单文件项目编译与调试
- 首先创建launch.json文件,在工程目录下会出现.vscode文件夹,脚本内容如下,具体代码变量含义可以参考Variables Reference
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/build/${fileBasenameNoExtension}",
"args": [],
"cwd": "${workspaceFolder}",
"preLaunchTask": "Build C++",
"internalConsoleOptions": "neverOpen",
"console": "integratedTerminal"
}
]
}
- Ctrl+shift+p调出命令窗口选择Tasks: Configure Task,.vscode文件夹生产task.json文件,输入如下内容。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Build C++",
"command": "clang",
"args": [
"--std=c++20",
"-g",
"-Wall",
"-o",
"${workspaceFolder}/build/${fileBasenameNoExtension}",
"${file}"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
]
}
- 注意在工程目录下创建一个build目录,之后便可以运行debug。
四、CMake环境配置
- ARCH系统安装CMake、Ninja(或make)
sudo pacman -S cmake
sudo pacman -S ninja
- CMakelists.txt配置,这里给出一个简单的示例
project(test)
cmake_minimum_required(VERSION 3.15.0)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS OFF)
add_executable(${CMAKE_PROJECT_NAME} test.cpp)
- 调出控制命令,输入CMake: Configure,笔者使用的是Clang-13工具链,配置好后build
- CMake配置后不需要tasks.json文件,修改launch.json的“program”,删除““preLaunchTask”: “Build C++”, ”,参考CMake-Tools
- 点击vscode下面状态栏的all,选择当前要debug的项目,快捷键F5启动debug
五、代码整理:Clang-Format
- 在工程目录下创建一个.clang-format文件,具体配置可以参考clang-format
- 这里提供一个示例
BasedOnStyle: Microsoft
UseTab: Never
IndentWidth: 4
DerivePointerAlignment: false
PointerAlignment: true
AlwaysBreakAfterReturnType: None
AlwaysBreakTemplateDeclarations: true
AlwaysBreakBeforeMultilineStrings: true
AlignOperands: true
AlignAfterOpenBracket: true
AlignConsecutiveBitFields: true
AlignConsecutiveMacros: true
ConstructorInitializerAllOnOneLineOrOnePerLine: true
AllowAllConstructorInitializersOnNextLine: false
BinPackArguments: false
BinPackParameters: false
IncludeBlocks: Regroup
总结
以上就是今天要讲的内容,本文仅仅简单介绍了VS Code结合clangd+CMake的使用,欢迎留言讨论。