Xcode編譯過程
打包過程
- 源碼編譯
- 靜態(tài)庫鏈接
- 資源編譯、優(yōu)化、導入
- 配置文件生成
- 簽名打包
Xcode 遇到的錯誤
- 語法錯誤
- 找不到頭文件
- 找不到聲明
- 重復符號
- 缺少符號
配置類型
- infos 項目相關信息
- plist
- entitlements
- build phases 編譯各階段配置
- Target Dependencies
- Compile Sources
- Link with Libraries
- Run Script
- build settings編譯細節(jié)
- 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
源代碼 -> 語言前端 -> 優(yōu)化器 -> 后端 -> 機器碼
- 語言前端翻譯成統(tǒng)一中間碼,進行優(yōu)化操作
- 后端把中間碼根據不同架構翻譯成不同機器識別的機器碼
編譯器語言前端編譯過程
- 預處理
- 詞法分析Lexer
- 語法分析,生成AST語法樹
- 中間代碼生成
Clang組成部分
- 預處理: 引入頭文件、執(zhí)行預處理指令、宏定義展開、去除注釋
- clang -E *.m 進行預處理
- 詞法解析:代碼句子處理成單詞
- clang -fsyntax-only -fmodules -Xclang -dump-tokens *.m
- 語法分析: 單詞組成語法樹
- clang -fsyntax-only -fmodules -Xclang -ast-dump *.m
- 中間代碼即為bitcode
Link
- 解決依賴
- 確定地址引用
- Mach-O結構組裝
- 生成可執(zhí)行文件
Clang API
LibClang 拿結果,語言封裝,作統(tǒng)計
-
Clang Plugins 插件,解析編譯過程
屏幕快照 2019-07-22 下午11.19.44.png LibTooling 獨立運行文件,可單獨調試
可以用來做什么
- 定義規(guī)范、靜態(tài)檢查
- 錯誤、警告自動改正
- 自動代碼l轉換
- 代碼統(tǒng)計和優(yōu)化
Xcode只是一個殼子
