小工具知识网

当前位置: 首页 > 行业知识 > vscode搭配clangd配置现代c++环境

行业知识

vscode搭配clangd配置现代c++环境

2026-11-07 14:48:52 来源:互联网转载

Vscode Modern CPP 环境配置

摘要

本文介绍了clangd, clang-format, clang-tidy的相关内容,主要是给出了包括VSCode在内的若干配置文件。下载VSCode、安装相关插件等过程略。

clangd版本配置

clangd是一个…(clangd官网),简单来说就是一个提供高亮补全等功能的lsp,不能直接用,一般需要通过插件进行访问。

要想在VSCode中使用clangd进行高亮、补全,而且指定使用的c++标准,大致需要以下操作:

  • 关闭官方包的 intelligence, 可以在settings.json中指定 "C_Cpp.intelliSenseEngine": "disabled",
  • 指定clangd的版本。打开vscode设置,搜索 clangd: fallback,然后添加你想用的c++标准

    更精细的配置是使用配置文件,如下:

    常用配置文件

    .clangd或config.yaml

    在当前项目目录,或者全局目录(LINUX: ~/.config/clangd/config.yaml, WINDOWS: %LocalAppData%\clangd\config.yaml)下创建配置文件。可以指定clangd使用的c++版本,以及clangd-tidy进行诊断的条目

    Index:  Background: BuildCompileFlags:  Add: [-xc++, -Wall, -std=c++20]  Compiler: clang++Diagnostics:  ClangTidy:    Add: ["*"]    Remove: [        abseil*,        fuchsia*,        llvmlib*,        zircon*,        altera*,        google-readability-todo,        readability-braces-around-statements,        hicpp-braces-around-statements,        modernize-use-trailing-return-type, # 不要每个都加上尾返回值类型        readability-identifier-length, # 不检查变量名长度        cppcoreguidelines-avoid-magic-numbers, # 不检查魔法数字        readability-magic-numbers, #同上      ]

    .clang-format

    #基于那个配置文件BasedOnStyle: GoogleLanguage: Cpp# 标准: Cpp03, Cpp11, AutoStandard: c++20ColumnLimit: 120BraceWrapping:  # case标签后面  AfterCaseLabel: false  # class定义后面  AfterClass: false  # 控制语句后面  AfterControlStatement: Never  # enum定义后面  AfterEnum: false  # 函数定义后面  AfterFunction: false  # 命名空间定义后面  AfterNamespace: false  # ObjC定义后面  AfterObjCDeclaration: false  # struct定义后面  AfterStruct: false  # union定义后面  AfterUnion: false  #ExternBlock定义后面  AfterExternBlock: false  # catch之前  BeforeCatch: false  # else之前  BeforeElse: false  # lambda块之前  BeforeLambdaBody: false  # while之前  BeforeWhile: false  # 缩进大括号  IndentBraces: false  # 分割空函数  SplitEmptyFunction: true  # 分割空记录  SplitEmptyRecord: true  # 分割空命名空间  SplitEmptyNamespace: true# 在 @property 后面添加空格, \@property (readonly) 而不是 \@property(readonly).ObjCSpaceAfterProperty: true# 访问说明符(public、private等)的偏移AccessModifierOffset: -4# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)AlignAfterOpenBracket: Align# 连续赋值时,对齐所有等号AlignConsecutiveAssignments: Consecutive# 连续声明时,对齐所有声明的变量名AlignConsecutiveDeclarations: Consecutive# 连续宏声明时,对齐空格 #clang-format-10 可用AlignConsecutiveMacros: Consecutive# 对齐连接符: DontAlign(不对齐), Left(左对齐), Right(右对齐)AlignEscapedNewlines: Left# 水平对齐二元和三元表达式的操作数AlignOperands: Align# 对齐连续的尾随的注释AlignTrailingComments: true# 允许函数调用的所有参数在放在下一行AllowAllArgumentsOnNextLine: true# 允许函数声明的所有参数在放在下一行AllowAllParametersOfDeclarationOnNextLine: true# 允许短的块放在同一行AllowShortBlocksOnASingleLine: Never# 允许短的case标签放在同一行AllowShortCaseLabelsOnASingleLine: false# 允许短的枚举放在同一行AllowShortEnumsOnASingleLine: false# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), AllAllowShortFunctionsOnASingleLine: None# 允许短的if语句保持在同一行AllowShortIfStatementsOnASingleLine: Never# 允许短的Lambdas语句保持在同一行AllowShortLambdasOnASingleLine: None# 允许短的循环保持在同一行AllowShortLoopsOnASingleLine: false# 总是在定义返回类型后换行(deprecated)AlwaysBreakAfterDefinitionReturnType: None# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数),#   AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)AlwaysBreakAfterReturnType: None# 总是在多行string字面量前换行AlwaysBreakBeforeMultilineStrings: false# 总是在template声明后换行AlwaysBreakTemplateDeclarations: Yes# false表示函数实参要么都在同一行,要么都各自一行BinPackArguments: true# false表示所有形参要么都在同一行,要么都各自一行BinPackParameters: true# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效# 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)BreakBeforeBinaryOperators: NonAssignment# 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似),#   Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似),#   Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom#   注:这里认为语句块也属于函数BreakBeforeBraces: Custom# 在三元运算符前换行BreakBeforeTernaryOperators: true# 在构造函数的初始化列表的逗号前换行BreakConstructorInitializersBeforeComma: falseBreakConstructorInitializers: BeforeColon# 在类声明继承列表的逗号前换行BreakInheritanceList: BeforeColonBreakAfterJavaFieldAnnotations: false# 允许中断长字符串BreakStringLiterals: true# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变CommentPragmas: '^ IWYU pragma:'# 允许连续的名称空间声明将在同一行CompactNamespaces: false# 构造函数的初始化列表的缩进宽度ConstructorInitializerIndentWidth: 4# 延续的行的缩进宽度ContinuationIndentWidth: 4# 去除C++11的列表初始化的大括号{后和}前的空格Cpp11BracedListStyle: true# 继承最常用的指针和引用的对齐方式DerivePointerAlignment: true# 关闭格式化DisableFormat: false# 修饰符后放置空行EmptyLineAfterAccessModifier: Never# 修饰符前放置空行EmptyLineBeforeAccessModifier: LogicalBlock# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)ExperimentalAutoDetectBinPacking: false# 修正命名空间注释FixNamespaceComments: true# 需要被解读为foreach循环而不是函数调用的宏ForEachMacros:  - foreach  - Q_FOREACH  - BOOST_FOREACH# 需要解读为if的函数IfMacros:  - KJ_IF_MAYBEIncludeBlocks: Regroup# 对#include进行排序,匹配了某正则表达式的#include拥有对应的优先级,匹配不到的则默认优先级为INT_MAX(优先级越小排序越靠前),#   可以定义负数优先级从而保证某些#include永远在最前面IncludeCategories:  - Regex: '^'    Priority: 2    SortPriority: 0    CaseSensitive: false  - Regex: '^'    Priority: 1    SortPriority: 0    CaseSensitive: false  - Regex: '^

上一篇:揭秘网盘搜索引擎源码,探索神秘面纱下的真相

下一篇:javaee服务器锁住怎么办?