我的第一个Clang插件

概念 编译的主要流程 输入文件 预处理 编译阶段 后端 链接 绑定 如何利用Clang提升开发质量 Clang提供了什么能力? libClang Clang Plugins LibTooling 我的第一个Clang插件 编译 llvm-project 编写clang plugin的准备工作 编写clang plugin Xcode集成Clang插件 指定clang 关闭 Enable Index-While-Building Functionality 指定需要额外加载的clang plugin 编译结果 我的第一个LibTooling 使用ninja编译llvm项目 创建libtooling 使用LibTooling 概念 LLVM Low Level Virtual Machine,由 Chris Lattner(Swift 作者) 用于 Objective-C 和 Swift 的编译,后来又加上了很多功能可用于常规编译器、JIT 编译器、调试器、静态分析工具等。总结来说,LLVM 是工具链技术与一个模块化和可重用的编译器的集合。 Clang 是 LLVM 的子项目,可以对 C、C++和 Objective-C 进行快速编译,编译速度比 GCC 快 3 倍。Clang 可以认为是 Objective-C 的编译前端,LLVM 是编译后端,前端调用后端接口完成任务。Swift 则有自己的编译前端 SIL optimizer,编译后端同样用的是 LLVM。 AST 抽象语法树,按照层级关系排列。 IR 中间语言,具有与语言无关的特性,整体结构为 Module(一个文件)–Function–Basic Block–Instruction(指令)。 编译器 编译器用于把代码编译成机器码,机器码可以直接在 CPU 上面运行。好处是运行效率高,坏处是调试周期长,需要重新编译一次(OC 改完代码需要重新运行)。 解释器 解释器会在运行时解释执行代码,会一段一段的把代码翻译成目标代码,然后执行目标代码。好处是具有动态性,调试及时(类似 Flutter、Playground),坏处是执行效率低。平时在调试代码的时候,使用解释器会提高效率。 编译的主要流程 通过命令行查看源码的编译流程...

May 30, 2023 · Jdy