我正在将目前用gcc编译的项目移动到clang,并且有一堆gcc没有生成的警告(-Winconsistent-missing-override
)。 clang-tidy
用于修复*.cpp
文件中的这些错误,但是它没有触及hpp
文件,因为在数据库中找不到编译命令(正如我所料)。
我正在使用ninja
来构建项目,并使用ninja -t compdb cc cxx > .build/compile_commands.json
来生成编译数据库。我试过跑:
clang-tidy-3.6 -p .build/ \
$(find src/ -name *.cpp) \
$(find src/ -name *.hpp) \
--checks=misc-use-override --fix
修复错误。它拒绝触摸头文件抱怨:
Skipping .../src/header/file.hpp. Compile command not found.
我通过指定--header-filter=src/
选项来实现它。有趣的是,修复程序最终被多次应用,导致输出如下:
void f() override override override override override;
我通过分别在每个源文件上运行clang-tidy
来解决这个问题。另请注意,使用<build-path>
指定的-p
还必须包含要应用样式的.clang-format
配置。
这是我当前的命令迭代:
find src/ -name '*.cpp' -exec \
clang-tidy-3.6 -p . --header-filter=src/ {}
--checks=misc-use-override --fix
正确使用“-header-filter”时要小心。在“标题”之前没有两个“减号”字符!不像在nishantjr回复。
如图所示:http://releases.llvm.org/3.9.0/tools/clang/tools/extra/docs/clang-tidy/index.html
在铿锵的9.0中仍然如此。