2015-07-21 61 views
3

这将是一个普遍的问题。我目前正在为clang写一个与AST遍历有关的工具。所以我有一个frontendaction来创建一个ASTConsumer,这个,还有一个RecursiveASTVistor。我打电话Tool.run()来执行我的操作。它运行良好,但默认情况下铿锵打印出我试图分析的回购中的所有警告和错误。无论如何,我可以禁用铛诊断?我知道当我们用clang编译时,-w选项都会禁用诊断。但是,我们如何为一个工具做到这一点?顺便说一下,我的工具驻留在/llvm/tools/clang/tools/extra/mytool禁用Clang工具诊断

谢谢。

回答

3

您可以使用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>(); 
    } 
}; 

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

另一种选择是--后传递-w选项,以便使工具在命令行无视警告(错误消息将不会被抑制,当然):

mytool.exe test.cpp -- -w