2015-07-21 94 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