vscode里使用EIDE,编译GD32,如何屏蔽官方库的C语言代码警告提示(非错误)
修改已完成。下面是完整总结:
一、修改了哪些文件,改了什么内容
文件 1:.eide/files.options.yml
作用:让armclang 编译器在编译官方外设库的.c文件时,不产生任何警告。
改动:
files:'Firmware/GD32E23x_standard_peripheral/**/*.c':--wvirtualPathFiles:'Peripherals/**/*':--wfiles是按实际磁盘路径匹配,对应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':--wvirtualPathFiles:'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":4severity: 2= Warning-Wunsafe-buffer-usage、-Wunused-parameter、-Wshadow-header= 这些都是Warningunused-includes= clangd 的提示信息(Hint)
它们都不是 Error。所以如果官方库真的有语法错误、缺少分号、未定义符号等问题,-w不会帮你掩盖,编译器照样会报错,编译照样会失败。
一句话总结
错误(Error)照常显示,编译遇到错误照样停;只有烦人的警告(Warning)和提示(Hint)被静默掉。
