LibTooling (库工具)
为
介绍
用
这里演示运行
解析内存中的代码片
如果想对,如对
#include "clang/Tooling/Tooling.h" TEST(runToolOnCode, CanSyntaxCheckCode) { //`runToolOnCode`返回在给定代码上是否正确`操作`运行. EXPECT_TRUE(runToolOnCode(std::make_unique<clang::SyntaxOnlyAction>(), "class X {};")); }
编写独立工具
一旦对
为此,创建了一个
解析常用工具选项
可从
#include "clang/Tooling/CommonOptionsParser.h" #include "llvm/Support/CommandLine.h" using namespace clang::tooling; //对`所有命令行选项`,应用自定义分类,以便只显示他们. static llvm::cl::OptionCategory MyToolCategory("my-tool options"); int main(int argc, const char **argv) { //`CommonOptionsParser`构造器解析参数,并创建`编译数据库`.如果出现错误,它终止程序. CommonOptionsParser OptionsParser(argc, argv, MyToolCategory); //使用`OptionsParser.getCompilations()`和`OptionsParser.getSourcePathList()`提取`编译数据库`和输入文件路径列表. }
创建并运行ClangTool
一旦有了
//可在同一进程中运行多个源的`clang`工具. std::vector<std::string> Sources; Sources.push_back("a.cc"); Sources.push_back("b.cc"); //把创建的`编译数据库`和要运行的`源码`交给`工具构造器`. ClangTool Tool(OptionsParser.getCompilations(), Sources); //`ClangTool`要为运行的每个`翻译单元`提供一个新的`FrontendAction`.因此,它以`FrontendActionFactory`作为参数. //要从给定的`FrontendAction`类型创建`FrontendActionFactory`,调用`newFrontendActionFactory<clang::SyntaxOnlyAction>()`. int result = Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>().get());
组合在一起,第一个工具
现在,
//声明`clang::SyntaxOnlyAction`. #include "clang/Frontend/FrontendActions.h" #include "clang/Tooling/CommonOptionsParser.h" #include "clang/Tooling/Tooling.h" //声明`llvm::cl::extrahelp`. #include "llvm/Support/CommandLine.h" using namespace clang::tooling; using namespace llvm; static cl::OptionCategory MyToolCategory("my-tool options"); static cl::extrahelp CommonHelp(CommonOptionsParser::HelpMessage); //之后可添加此指定工具的帮助消息. static cl::extrahelp MoreHelp(" More help text... "); int main(int argc, const char **argv) { CommonOptionsParser OptionsParser(argc, argv, MyToolCategory); ClangTool Tool(OptionsParser.getCompilations(), OptionsParser.getSourcePathList()); return Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>().get()); }
在某些代码上运行该工具
检出并构建
可通过在
$ cd /path/to/source/llvm $ export BD=/path/to/build/llvm $ $BD/bin/clang-check tools/clang/tools/clang-check/ClangCheck.cpp -- clang++ -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -Itools/clang/include -I$BD/include -Iinclude -Itools/clang/lib/Headers -c
或,还可按把
# 或从UI设置CMAKE_EXPORT_COMPILE_COMMANDS. $ cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .
这在目录中创建叫
$ cd /path/to/source/llvm $ export BD=/path/to/build/llvm $ $BD/bin/clang-check -p $BD tools/clang/tools/clang-check/ClangCheck.cpp
内置包含
相对工具二进制文件的
提示:如果工具找不到
连接
有关要链接的