运行 大型项目中的 Clang-Tidy

Running Clang-Tidy on a Large Project

I 运行 clang-tidy (Clang-Extra-Tools 6.0.0) 在应用程序源代码的根目录下(MPlayer-1.3.0)。准确的说,我使用run-clang-tidy.pypython脚本,如下:

run-clang-tidy.py -header-filter='.*' -checks='-*,readability-braces-around-statements' -fix

命令数据库也存储在根目录中名为 compile_commands.json 的文件中。收集所有修复后,它会尝试应用它们,但不会对从 inner 目录编译的任何源文件应用修复。这是错误报告的第一部分:

Applying fixes ...
Described file './libavutil/internal.h' doesn't exist. 
Ignoring...
Described file './libavutil/x86/intmath.h' doesn't exist. 
Ignoring...
Described file 'libavformat/internal.h' doesn't exist. 
Ignoring...
Described file './libavcodec/bytestream.h' doesn't exist. 
Ignoring...
Described file './libavcodec/flac.h' doesn't exist. 
Ignoring...
Described file './libavcodec/get_bits.h' doesn't exist. 
Ignoring...
Described file './libavcodec/internal.h' doesn't exist. 
Ignoring...
Described file './libavcodec/mathops.h' doesn't exist. 
Ignoring...
Described file './libavcodec/put_bits.h' doesn't exist. 
Ignoring...
Described file 'libavformat/matroskaenc.c' doesn't exist. 
Ignoring...
Described file 'libavformat/subtitles.h' doesn't exist. 
Ignoring...
Described file 'libavformat/apngdec.c' doesn't exist. 
Ignoring...
...

这些文件是使用文件夹 ffmpeg 中的 Makefile 编译的。例如,libavformat/apngdec.c 位于 ./ffmpeg/libavformat/apngdec.c,其中 .MPlayer-1.3.0 的根目录。我该如何解决这个问题?

事实上,这是 Clang Tidy 中的一个错误。它只发生在出口的情况下。在使用 -fix 开关调用 run-clang-tidy 脚本等情况下会发生这种情况。主要问题是存储在导出文件中的修复应该使用绝对路径。这通常发生在使用 CMAKE 生成编译命令数据库的项目中。但是 MPlayer 使用 Makefile 作为构建系统,我使用 Bear 生成数据库。将修复程序合并到同一位置也存在问题。

为了解决这个问题,我主要是构造了绝对路径,并做了一些类似于没有导出的代码的其他修改。最后修改生成YAML导出文件。补丁是 here.