Xcode編譯過程
打包過程
- 源碼編譯
- 靜態(tài)庫鏈接
- 資源編譯苗沧、優(yōu)化、導(dǎo)入
- 配置文件生成
- 簽名打包
Xcode 遇到的錯誤
- 語法錯誤
- 找不到頭文件
- 找不到聲明
- 重復(fù)符號
- 缺少符號
配置類型
- infos 項目相關(guān)信息
- plist
- entitlements
- build phases 編譯各階段配置
- Target Dependencies
- Compile Sources
- Link with Libraries
- Run Script
- build settings編譯細(xì)節(jié)
- Compiler
- Linker
- Assets
- Packaging
編譯工具
- clang 編譯源文件
- clang -x objective -arch x86_64 -c *.m -o *.o
- libtool
- codesign
LLVM
Clang基于LLVM的C語言前端
源代碼 -> 語言前端 -> 優(yōu)化器 -> 后端 -> 機器碼
- 語言前端翻譯成統(tǒng)一中間碼,進行優(yōu)化操作
- 后端把中間碼根據(jù)不同架構(gòu)翻譯成不同機器識別的機器碼
編譯器語言前端編譯過程
- 預(yù)處理
- 詞法分析Lexer
- 語法分析粥烁,生成AST語法樹
- 中間代碼生成
Clang組成部分
- 預(yù)處理: 引入頭文件棚瘟、執(zhí)行預(yù)處理指令、宏定義展開府树、去除注釋
- clang -E *.m 進行預(yù)處理
- 詞法解析:代碼句子處理成單詞
- clang -fsyntax-only -fmodules -Xclang -dump-tokens *.m
- 語法分析: 單詞組成語法樹
- clang -fsyntax-only -fmodules -Xclang -ast-dump *.m
- 中間代碼即為bitcode
Link
- 解決依賴
- 確定地址引用
- Mach-O結(jié)構(gòu)組裝
- 生成可執(zhí)行文件
Clang API
LibClang 拿結(jié)果俐末,語言封裝,作統(tǒng)計
-
Clang Plugins 插件奄侠,解析編譯過程
LibTooling 獨立運行文件卓箫,可單獨調(diào)試
可以用來做什么
- 定義規(guī)范、靜態(tài)檢查
- 錯誤垄潮、警告自動改正
- 自動代碼l轉(zhuǎn)換
- 代碼統(tǒng)計和優(yōu)化
Xcode只是一個殼子