禁用 Clang 工具诊断
Disable Clang Tool diagnostics
这将是一个一般性问题。我目前正在为 clang
编写一个与 AST 遍历相关的工具。所以我有一个 frontendaction
来创建一个 ASTConsumer
,它还有一个 RecursiveASTVistor
。我调用 Tool.run()
来执行我的操作。它运行良好,但默认情况下 clang 会打印出我尝试分析的 repo 中的所有警告和错误。无论如何我可以禁用 clang 诊断吗?我知道当我们用 clang 编译时,-w
选项都会禁用诊断。但是我们如何为工具做到这一点?顺便说一下,我的工具位于 /llvm/tools/clang/tools/extra/mytool
谢谢。
您可以使用 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
这将是一个一般性问题。我目前正在为 clang
编写一个与 AST 遍历相关的工具。所以我有一个 frontendaction
来创建一个 ASTConsumer
,它还有一个 RecursiveASTVistor
。我调用 Tool.run()
来执行我的操作。它运行良好,但默认情况下 clang 会打印出我尝试分析的 repo 中的所有警告和错误。无论如何我可以禁用 clang 诊断吗?我知道当我们用 clang 编译时,-w
选项都会禁用诊断。但是我们如何为工具做到这一点?顺便说一下,我的工具位于 /llvm/tools/clang/tools/extra/mytool
谢谢。
您可以使用 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