iOS 开发高手课
戴铭
前滴滴出行技术专家
42934 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
用户故事 (1讲)
iOS 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

37 | 如何编写 Clang 插件?

CreateASTConsumer
生成目标平台所需的编译文件
CMakeList.txt
LibTooling
Clang 插件
LibClang
Clang 插件的其他应用场景
获取源码位置信息
Clang AST
-cc1 参数
-plugin 选项
-load 命令行选项
FrontendPluginRegistry::Add<>
ParseArgs
VisitCXXRecordDecl
VisitNodeType
ASTFrontendAction
编写 CMakeLists.txt 文件
创建目录和文件
生成 Xcode 工程
生成 Makefile 文件
创建构建所需目录
拉取 Clang 代码
编译 Clang
提供接口库
课后作业
小结
使用 Clang 插件
注册 Clang 插件
编写 PluginASTAction 代码
使用 RecursiveASTVisitor
FrontActions
准备编写 Clang 插件
在 macOS 平台上编译 Clang
编译前置条件
模块化设计
Clang 插件
如何编写 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 插件。
Clang 插件代码编写后进行编译的前置条件是编译 Clang。要想编译 Clang ,你就需要先安装 CMake 工具,来解决跨平台编译规范问题。
我们可以先通过 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
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • Sam
    只会 c 可以进行插件开发吗?

    作者回复: c可以使用 LibClang 这个库来开发 Clang 工具

    2019-07-19
    1
  • FR
    同问,苹果新推出swiftUI还有意义吗
    2019-06-04
    3
    10
  • Ankhetsin
    如何评价苹果新出的SwiftUI
    2019-06-04
    1
    6
  • xilie
    老师,请假个问题,热更新的很多方案都被苹果封了,其中有一个没开源的,据说手机 QQ ,他们通过 clang 把 OC 代码编译成自己定制的字节码动态下发,然后开发一个虚拟机去执行(惊呆了),同样实现了原生开发,动态运行。 我自己试了一下,runtime可以动态生成类、属性、方法,但是怎么动态生成方法的实现(IMP)呢?
    2019-06-11
    2
    3
  • Chauncey
    macOS不能说是类unix好吧,是真正的unix分支啊
    2019-06-14
    1
  • 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-22
    2
  • 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 2
    2019-06-17
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部