37 | 如何编写 Clang 插件?
戴铭
该思维导图由 AI 生成,仅供参考
你好,我是戴铭。今天,我和你分享的主题是,如何编写 Clang 插件。
Clang 使用的是模块化设计,可以将自身功能以库的方式来供上层应用来调用。比如,编码规范检查、IDE 中的语法高亮、语法检查等上层应用,都是使用 Clang 库的接口开发出来的。Clang 库对接上层应用有三个接口库,分别是 LibClang、Clang 插件、LibTooling。关于这三个接口库的介绍,我已经在第 8 篇文章中和你详细分享过。
其中,LibClang 为了兼容更多 Clang 版本,相比 Clang 少了很多功能;Clang 插件和 LibTooling 具备 Clang 的全量能力。Clang 插件编写代码的方式,和 LibTooling 几乎一样,不同的是 Clang 插件还能够控制编译过程,可以加 warning,或者直接中断编译提示错误。另外,编写好的 LibTooling 还能够非常方便地转成 Clang 插件。
所以说,Clang 插件在功能上是最全的。今天这篇文章,我们就一起来看看怎样编写和运行 Clang 插件。
我们可以先通过 CMakeList.txt 文件,来定制 CMake 编译流程,再根据 CMakeList.txt 文件生成目标平台所需的编译文件。这个编译文件,在类 UNIX 平台就是 Makefile,在 Windows 平台就是 Visual Studio 工程,macOS 里还可以生成 Xcode 工程。所以,你可以使用熟悉的 Xcode 来编译 Clang。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何编写 Clang 插件以及在 macOS 平台上编译 Clang 的过程。Clang 插件具备强大的功能,可以控制编译过程并进行自定义操作。文章重点介绍了编写 Clang 插件的入口 FrontActions,以及如何使用 ASTFrontendAction 和 ASTConsumer 进行自定义操作。此外,还详细讲解了如何使用 RecursiveASTVisitor 遍历 AST 节点,以及如何编写 PluginASTAction 的 ParseArgs 函数来处理入口参数。文章还介绍了如何注册 Clang 插件以及使用 Clang 插件的方法。总的来说,本文内容涵盖了 Clang 插件的开发流程和关键技术,对于想要深入了解 Clang 插件开发的读者具有很高的参考价值。文章内容丰富,对于想要深入了解 Clang 插件开发的读者具有很高的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》,新⼈⾸单¥59
《iOS 开发高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(11)
- 最新
- 精选
- Sam只会 c 可以进行插件开发吗?
作者回复: c可以使用 LibClang 这个库来开发 Clang 工具
2019-07-191 - FR同问,苹果新推出swiftUI还有意义吗2019-06-04310
- Ankhetsin如何评价苹果新出的SwiftUI2019-06-0416
- xilie老师,请假个问题,热更新的很多方案都被苹果封了,其中有一个没开源的,据说手机 QQ ,他们通过 clang 把 OC 代码编译成自己定制的字节码动态下发,然后开发一个虚拟机去执行(惊呆了),同样实现了原生开发,动态运行。 我自己试了一下,runtime可以动态生成类、属性、方法,但是怎么动态生成方法的实现(IMP)呢?2019-06-1123
- ChaunceymacOS不能说是类unix好吧,是真正的unix分支啊2019-06-141
- Geek_ac42dc这个可以使用ninja 编译 ,Xcode 编译速度有点慢啊2021-12-28
- ...方法名混淆后审核会有影响吗2021-09-04
- Master老师,您好! cmake -G Xcode -DLLVM_ENABLE_PROJECTS=clang ../llvm 我使用上面这个命令来构建 xcode project,scheme 和 文件目录下一个 clang 相关的内容都没有,这是为何?我的 Xcode 版本是 11。 网上找了其他人相关教程,与您讲的步骤不完全一样,试着他们的做法,也还是一样。求助2020-05-04
- CyrusCao没有写如何将 .cpp 生成 .dylib 吧2019-08-222
- Geek__f56783130103[ 72%] Built target clangCrossTU make[2]: *** No rule to make target `ClangOpenCLBuiltinsImpl', needed by `tools/clang/lib/Sema/CMakeFiles/obj.clangSema.dir/SemaLookup.cpp.o'. Stop. make[1]: *** [tools/clang/lib/Sema/CMakeFiles/obj.clangSema.dir/all] Error 2 make: *** [all] Error 22019-06-17
收起评论