网上已经有很多VScode搭配Keil Assistant使用的教程了,这里就不在赘述了。
文章主要介绍Clangd的插件的使用,该插件在keil生成的MCU工程下使用较少,网上翻了很久也没有找到案例。

首先在Vscode的插件商店里安装Clangd插件,需要注意的是Clangd和C/C++插件功能一致,会导致冲突,需要将C/C++卸载或者禁用。
安装完成后随便打开一个你的工程会发现有很多报错。
这个是正常的,clangd并不能自动识别你的keil工程所包含的头文件路径和标准库头文件。
先说下标准库头文件怎么添加,找到你clangd的全局配置文件“config.yaml”,如果是从VScode安装的一般在C:\Users\xxx\AppData\Local\clangd下(xxx是你自己的系统用户名。
具体配置贴在下边了,需要注意的是
- -isystemC:/msys64/ucrt64/include # 这里的C:/msys64/ucrt64/include替换成你自己的标准库路径每个人都不相同,不确定的可以用索引软件搜索"string.h"所在位置。
# ==================== 代码补全配置 ====================
Completion:
# 在函数调用时显示参数列表分隔符提示(如逗号)
ArgumentLists: Delimiters
# ==================== 内联提示配置 ====================
InlayHints:
# 显示代码块的结束位置提示(如显示 "}" 对应的起始位置)
BlockEnd: true
# 显示函数参数的默认值提示
DefaultArguments: true
# 类型名称显示限制:0 表示不限制,显示完整类型名
TypeNameLimit: 0
# ==================== 悬停提示配置 ====================
Hover:
# 显示类型的别名信息(如 typedef、using 定义)
ShowAKA: true
# ==================== 诊断配置 ====================
Diagnostics:
# 禁用未使用头文件的警告(设置为 None 表示完全关闭) 不关闭你的头文件包含会一直警告
UnusedIncludes: None
# 抑制特定类型的诊断警告:
Suppress:
- 'drv_unknown_argument' # 忽略未知编译器参数的警告
- 'unused-includes' # 忽略未使用头文件的警告(与上条配合)
- 'pp_file_not_found' # 忽略预处理器找不到文件的警告
# ==================== 编译标志配置 ====================
CompileFlags:
# 添加系统头文件搜索路径(关键配置!)
Add:
- -isystemC:/msys64/ucrt64/include # 添加 MSYS2 UCRT 环境的系统头文件路径
# 移除特定的编译器标志(通常用于解决兼容性问题)
Remove:
- -mlongcalls # 移除长调用优化(常见于嵌入式开发)
- -fstrict-volatile-bitfields # 移除严格易失性位域处理
- -fno-shrink-wrap # 移除禁止收缩包装优化
- -fno-tree-switch-conversion # 移除禁止开关转换优化
这样你的项目就能定位到标准库的路径了,项目头文件路径需要在项目根目录创建一个compile_commands.json文件,手动包含你项目设置的头文件路径,这个如果是cmake可以直接生成的,可惜keil工程并不能这样,不过我从别的大佬哪里找到了一键生成工具,你只需要放到项目根目录下就可以,自动生成了。
原文链接:vscode使用clangd代替C/C++配置C项目(附keil生成对应的compile_commands.json) – 知秋的个人Blog
生成后重启你的VScode,能够正常索引到你的头文件就配置成功了。
clangd插件设置里可以添加一些参数,这个不添加也不影响正常使用。
核心功能参数
-
--background-index-
作用:启用后台索引,在空闲时分析项目代码
-
效果:提供更快的代码补全和导航,但会增加初始内存使用
-
-
--compile-commands-dir=$(workspaceFolder)/-
作用:指定编译数据库
compile_commands.json的目录 -
$(workspaceFolder):VSCode 变量,指向项目根目录 -
重要性:这是 clangd 正确理解项目结构的关键配置
-
这个可能会导致你生成的配置文件不会被正确识别,不建议用。
-
-
-j=12-
作用:设置并行工作线程数为 12
-
建议:根据 CPU 核心数调整(通常设为 CPU 核心数)
-
代码分析增强
-
--clang-tidy-
作用:集成 clang-tidy 静态分析工具
-
效果:提供代码质量检查、风格建议和潜在错误检测
-
-
--all-scopes-completion-
作用:启用全作用域代码补全
-
效果:不仅补全当前作用域的符号,还包括全局和命名空间中的符号
-
补全体验优化
-
--completion-style=detailed-
作用:显示详细的补全信息
-
效果:补全时显示函数签名、返回类型、文档注释等
-
-
--header-insertion=iwyu-
作用:使用 "include-what-you-use" 策略插入头文件
-
效果:自动插入必要的头文件时,遵循最小化包含原则
-
性能与缓存
-
--pch-storage=disk-
作用:将预编译头文件(PCH)存储在磁盘
-
优势:减少内存占用,但可能略微降低加载速度
-
替代方案:
memory(更快但占用更多内存)
-
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/NiceNikeyo/article/details/156157223



