vscode里使用EIDE,编译GD32,如何屏蔽官方库的C语言代码警告提示(非错误)
·
修改已完成。下面是完整总结:
一、修改了哪些文件,改了什么内容
文件 1:.eide/files.options.yml
作用: 让 armclang 编译器 在编译官方外设库的 .c 文件时,不产生任何警告。
改动:
files:
'Firmware/GD32E23x_standard_peripheral/**/*.c':
- -w
virtualPathFiles:
'Peripherals/**/*':
- -w
files是按实际磁盘路径匹配,对应Firmware/GD32E23x_standard_peripheral/下的所有.c源文件。virtualPathFiles是按 eide 项目视图里的虚拟文件夹匹配,Peripherals正好就是官方外设库在 eide 里的显示名称。-w= 关闭该文件的全部编译警告。
文件 2:.clangd
作用: 让 clangd 语言服务器(VS Code 里代码下划线、Problems 面板提示)在分析官方外设库文件时,静默所有诊断。
改动: 在原配置末尾追加了两段路径条件配置
---
If:
PathMatch: Firmware/GD32E23x_standard_peripheral/.*\nCompileFlags:
Add: [-w]
---
If:
PathMatch: Firmware/GD32E23x_standard_peripheral/.*\nDiagnostics:
Suppress: [.*]
- 第一段:追加编译选项
-w,抑制编译器类型的诊断(如expanded from macro)。 - 第二段:
Suppress: [.*],抑制 clangd 自身特有的诊断(如unused-includes、-Wshadow-header等)。 PathMatch确保这两段只对官方外设库生效,你自己写的代码完全不受影响。
二、以后要添加其它官方文件/目录,怎么弄
场景 A:新增一个官方库目录(比如以后用了 Firmware/GD32E23x_usbd_driver)
改 .eide/files.options.yml:
在 files: 和 virtualPathFiles: 里各加一行:
files:
'Firmware/GD32E23x_standard_peripheral/**/*.c':
- -w
# 新增官方库
'Firmware/GD32E23x_usbd_driver/**/*.c':
- -w
virtualPathFiles:
'Peripherals/**/*':
- -w
# 新增官方库(假设你在 eide 里把它虚拟文件夹命名为 USBD)
'USBD/**/*':
- -w
改 .clangd:
把原来的 PathMatch 改成用 | 分隔的多条路径:
---
If:
PathMatch: Firmware/GD32E23x_standard_peripheral/.*|Firmware/GD32E23x_usbd_driver/.*
CompileFlags:
Add: [-w]
---
If:
PathMatch: Firmware/GD32E23x_standard_peripheral/.*|Firmware/GD32E23x_usbd_driver/.*
Diagnostics:
Suppress: [.*]
场景 B:偷懒一把,直接屏蔽所有 Firmware/ 和 Utilities/ 下的官方文件
如果你以后懒得逐个加,可以把匹配范围写宽:
.eide/files.options.yml:
files:
'Firmware/**/*.c':
- -w
'Utilities/**/*.c':
- -w
.clangd:
---
If:
PathMatch: Firmware/.*|Utilities/.*
CompileFlags:
Add: [-w]
---
If:
PathMatch: Firmware/.*|Utilities/.*
Diagnostics:
Suppress: [.*]
这样 Firmware(包含 CMSIS + 所有外设库)和 Utilities 里的所有官方文件都会被忽略。
三、改完后的生效步骤
- 重新编译项目(触发 armclang 读取新的
files.options.yml)。 - 重启 clangd:按
Ctrl+Shift+P→ 输入C/C++: Restart IntelliSense for Active File,或者重启 VS Code。
这一步是让 clangd 重新加载.clangd配置文件。
做完后,官方外设库相关的报错/警告就会从 Problems 面板和代码编辑器里彻底消失。
对的,-w 只屏蔽警告(Warning),不会屏蔽错误(Error)。
四、具体说明
| 级别 | VS Code Severity | 是否会被 -w 屏蔽 |
|---|---|---|
| Error | 1 | ❌ 不会,编译照样失败 |
| Warning | 2 | ✅ 会屏蔽 |
| Information / Hint | 3~4 | ✅ 会屏蔽 |
你提供的那些诊断:
"severity": 2, // Warning 级别
"message": "expanded from macro 'GPIO_BOP'"
"code": "-Wunsafe-buffer-usage", // 带 -W 前缀的就是 Warning
"severity": 4
severity: 2= Warning-Wunsafe-buffer-usage、-Wunused-parameter、-Wshadow-header= 这些都是 Warningunused-includes= clangd 的提示信息(Hint)
它们都不是 Error。 所以如果官方库真的有语法错误、缺少分号、未定义符号等问题,-w 不会帮你掩盖,编译器照样会报错,编译照样会失败。
一句话总结
错误(Error)照常显示,编译遇到错误照样停;只有烦人的警告(Warning)和提示(Hint)被静默掉。
更多推荐
所有评论(0)