Xcode编译过程
打包过程
- 源码编译
- 静态库链接
- 资源编译、优化、导入
- 配置文件生成
- 签名打包
Xcode 遇到的错误
- 语法错误
- 找不到头文件
- 找不到声明
- 重复符号
- 缺少符号
配置类型
- infos 项目相关信息
- plist
- entitlements
- build phases 编译各阶段配置
- Target Dependencies
- Compile Sources
- Link with Libraries
- Run Script
- build settings编译细节
- Compiler
- Linker
- Assets
- Packaging
编译工具
- clang 编译源文件
- clang -x objective -arch x86_64 -c *.m -o *.o
- libtool
- codesign
LLVM
Clang基于LLVM的C语言前端
屏幕快照 2019-07-22 下午11.15.11.png源代码 -> 语言前端 -> 优化器 -> 后端 -> 机器码
- 语言前端翻译成统一中间码,进行优化操作
- 后端把中间码根据不同架构翻译成不同机器识别的机器码
编译器语言前端编译过程
- 预处理
- 词法分析Lexer
- 语法分析,生成AST语法树
- 中间代码生成
Clang组成部分
- 预处理: 引入头文件、执行预处理指令、宏定义展开、去除注释
- clang -E *.m 进行预处理
- 词法解析:代码句子处理成单词
- clang -fsyntax-only -fmodules -Xclang -dump-tokens *.m
- 语法分析: 单词组成语法树
- clang -fsyntax-only -fmodules -Xclang -ast-dump *.m
- 中间代码即为bitcode
Link
- 解决依赖
- 确定地址引用
- Mach-O结构组装
- 生成可执行文件
Clang API
-
LibClang 拿结果,语言封装,作统计
-
Clang Plugins 插件,解析编译过程
屏幕快照 2019-07-22 下午11.19.44.png -
LibTooling 独立运行文件,可单独调试
可以用来做什么
- 定义规范、静态检查
- 错误、警告自动改正
- 自动代码l转换
- 代码统计和优化
Xcode只是一个壳子
网友评论