一句话: 要从 Keil 工程里踢掉一个源文件,直接编辑
.uvprojx(XML 格式)。看似简单——删几行 XML 就行。但实际上:正则没匹配到、残留空标签、IDE 从缓存恢复了改动。5 次尝试才搞对。
适合谁读:适合嵌入式开发者、单片机初学者及遇到类似问题的工程师
为什么不用 Keil 界面操作
改一个文件——界面点点删就行。但要批量删 10 个源文件——界面操作太慢。脚本编辑项目文件才是正路。
Keil 的.uvprojx是 XML 格式,里面<File>块记录每个源文件。
5 次失败
第 1 次:Perl 正则没匹配到
# 想法:匹配整个 Group 再整体删掉 s/<Group>.*?<\/Group>//gs;静默失败。正则里的缩进、换行符都和实际 XML 对不上。结果:什么也没删。
教训:XML 别用多行正则。缩进格式是不可靠的前提。
第 2 次:grep -v 留了空标签
grep -v "spi_drv.c" old.uvprojx > new.uvprojx删了<FileName>和<FilePath>行,但<File>和</File>空标签还在。Keil 打开工程时报"无效的工程文件"。
教训:删 XML 条目要删完整块,不是单独行。
第 3 次:Keil 后台重写了文件
改完之后验证通过。打开 Keil——它从缓存把旧内容写回去了,改动全部丢失。
教训:编辑项目文件之前,关掉 Keil。
第 4 次:漏了工作区文件
.uvprojx改对了,但.uvoptx(工作区文件)里还有旧条目的缓存。Keil 打开时把旧条目恢复到了项目文件里。
教训:改.uvprojx也要同步清理.uvoptx。
第 5 次:成功
# 1. 关掉 Keil # 2. 用 grep -v 删 FileName + FilePath # 3. 手动检查并删掉残留的空 <File></File> 标签 # 4. 同样清理 .uvoptx # 5. 重新打开 Keil,检查文件列表总结
| 坑 | 修法 |
|---|---|
| 多行正则匹配不可靠 | 逐行处理,别信缩进 |
| grep -v 留空标签 | 删完后读文件确认,清理空标签 |
| Keil 重写文件 | 改之前关掉 Keil |
.uvoptx恢复旧条目 | 同步清理工作区文件 |
| 不确定改对了没 | 打开 Keil 检查文件列表 |
XML 编辑的结论:别一次搞定,改一步验证一步。Keil 关掉再改。
有用的话点个收藏,下次调试直接用。有问题欢迎评论区交流,看到了都会回。