clang常用命令學(xué)習(xí)

  • 查看編譯源文件需要的幾個(gè)不同的階段:
clang -ccc-print-phases main.m
  • 查看oc的c實(shí)現(xiàn):
clang -rewrite-objc main.m
  • 查看操作內(nèi)部命令:
clang -### main.m -o main
  • 想看清clang的全部過程,可以先通過-E查看clang在預(yù)處理處理這步做了什么:(這個(gè)過程的處理包括宏的替換,頭文件的導(dǎo)入,以及類似#if的處理)
clang -E main.m
  • 預(yù)處理完成后就會(huì)進(jìn)行詞法分析,這里會(huì)把代碼切成一個(gè)個(gè) Token,比如大小括號(hào),等于號(hào)還有字符串等:
clang -fmodules -fsyntax-only -Xclang -dump-tokens main.m
  • 然后是語法分析,驗(yàn)證語法是否正確,然后將所有節(jié)點(diǎn)組成抽象語法樹 AST:
clang -fmodules -fsyntax-only -Xclang -ast-dump main.m
  • 完成這些步驟后就可以開始IR中間代碼的生成了,CodeGen 會(huì)負(fù)責(zé)將語法樹自頂向下遍歷逐步翻譯成 LLVM IR,IR 是編譯過程的前端的輸出后端的輸入:
clang -S -fobjc-arc -emit-llvm main.m -o main.ll
  • 這里 LLVM 會(huì)去做些優(yōu)化工作,在 Xcode 的編譯設(shè)置里也可以設(shè)置優(yōu)化級(jí)別-01,-03,-0s,還可以寫些自己的 Pass:
clang -O3 -S -fobjc-arc -emit-llvm main.m -o main.ll
  • 生成匯編
clang -S -fobjc-arc main.m -o main.s
  • 生成目標(biāo)文件
clang -fmodules -c main.m -o main.o
  • 生成可執(zhí)行文件
clang main.o -o main
  • 執(zhí)行
./main

下面是完整步驟:

1. 編譯信息寫入輔助文件,創(chuàng)建文件架構(gòu) .app 文件 
2. 處理文件打包信息 
3. 執(zhí)行 CocoaPod 編譯前腳本,checkPods Manifest.lock 
4. 編譯.m文件,使用 CompileC 和 clang 命令 
5. 鏈接需要的 Framework 
6. 編譯 xib 
7. 拷貝 xib ,資源文件 
8. 編譯 ImageAssets 
9. 處理 info.plist 
10. 執(zhí)行 CocoaPod 腳本 
11. 拷貝標(biāo)準(zhǔn)庫 
12. 創(chuàng)建 .app 文件和簽名
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容