ios llvm and clang build tools
1. 使用 libclan g或 clang 插件 包括( libclang 和 Clangkit)
备注:
Clangkit,它是基于 clang 提供的功能,用 Objective-C 进行封装的一个库。
libclang 提供的 API 非常简单,可以对 C 和 clang 做桥接,并可以用它对所有的源码做分析处理
2. 自定义分析器
备注:
按照 Tutorial for building tools using LibTooling 中的说明去构造 LLVM ,clang 以及 clan g的附加工具
3. clang其它特性
备注:
clang还有许多其他的用途。比如,可以写编译器插件(例如,类似上面的检查器例子)并且动态的加载到编译器中。虽然我没有亲自实验过,但是我觉得在 Xcode 中应该是可行的。再比如,也可以通过编写 clang 插件来自定义代码样式(具体可以参见 编译过程)
4. 延伸阅读
备注:
- Clang Tutorial
- X86_64 Assembly Language Tutorial
- Custom clang Build with Xcode (I) 和 (II)
- Clang Tutorial (I), (II) 和 (III)
- Clang Plugin Tutorial
- LLVM blog: What every C programmer should know (I) , (II) 和 (III)
5.编译过程:
备注:
预处理
? 符号化 (Tokenization)
? 宏定义的展开
? #include 的展开
语法和语义分析
?
将符号化后的内容转化为一棵解析树 (parse tree)
? 解析树做语义分析
? 输出一棵抽象语法树(Abstract Syntax Tree*
(AST))
生成代码和优化
? 将 AST 转换为更低级的中间码 (LLVM IR)
? 对生成的中间码做优化
?
生成特定目标代码
? 输出汇编代码
汇编器
? 将汇编代码转换为目标对象文件。
链接器
? 将多个目标对象文件合并为一个可执行文件
(或者一个动态库)
期待下期更新。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。