如何通过gcc或Emacs获取无重复的编译报错文件列表
实现方案
下面提供两种可直接落地的实现方式,可根据你的使用习惯选择:
方案1:GCC配合shell命令生成
你用make -k0持续编译时,可直接对编译输出做过滤提取,一步生成无重复错误文件列表:
make -k0 2>&1 | grep -E '^/.*: (error|warning): ' | cut -d: -f1 | sort -u > error_files.txt
命令说明:
2>&1将gcc输出的错误信息(默认输出到标准错误)重定向到标准输出- grep规则可根据你的实际编译配置调整:如果你把
[[deprecated]]的告警设为了错误,保留error匹配即可;如果是普通告警,把匹配规则改成对应warning字段即可 cut -d: -f1按冒号分割输出行,取第一个字段即为报错文件的绝对路径sort -u自动对文件列表去重,最终结果写入当前目录下的error_files.txt
方案2:Emacs Compilation Mode 内置实现
如果你已经在Emacs中跑完了编译流程,可直接在Emacs内提取结果,不需要重新跑编译:
- 切换到编译输出的compilation buffer,确保其为当前激活buffer
- 按
M-x打开minibuffer,输入以下Elisp代码执行,即可得到去重后的错误文件列表:
(delete-dups (mapcar #'car compilation-error-list))
- 如果需要把列表保存到本地文件,执行以下代码即可(可自行修改代码中的文件保存路径):
(with-temp-file "~/need_fix_files.txt" (dolist (file (delete-dups (mapcar #'car compilation-error-list))) (insert file "\n")))
内容的提问来源于stack exchange,提问作者Romário
相关产品推荐
相关产品推荐

