禁用Clang工具诊断

Gaw*_*ain 5 c++ llvm clang llvm-clang c++11

这将是一个普遍的问题。我目前正在编写clang与AST遍历相关的工具。因此,我必须frontendaction创建一个ASTConsumer,进一步需要一个RecursiveASTVistor。我打电话Tool.run()执行我的动作。它运行正常,但是默认情况下clang会打印出我尝试分析的仓库中的所有警告和错误。无论如何,我可以禁用clang诊断程序吗?我知道当我们用clang编译时,该-w选项全部禁用诊断。但是,我们如何为工具做到这一点呢?顺便说一句,我的工具位于/llvm/tools/clang/tools/extra/mytool

谢谢。

LVK*_*LVK 5

您可以使用IgnoringDiagConsumer禁止显示所有诊断消息:

class MyFrontendAction : public ASTFrontendAction
{
public:
    MyFrontendAction() {}

    std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, StringRef file) override
    {
        CI.getDiagnostics().setClient(new IgnoringDiagConsumer());
        return llvm::make_unique<MyASTConsumer>();
    }
};
Run Code Online (Sandbox Code Playgroud)

或者,您可以实现自己的DiagnosticConsumer来处理诊断。

另一个选择是在命令行-w之后将选项传递给您的工具--以忽略警告(当然,不会抑制错误消息):

mytool.exe test.cpp -- -w
Run Code Online (Sandbox Code Playgroud)