深入淺出 Xcode 命令列(2)-xcrun 基礎
Xcode命令列 = Xcode Command Lines Tool
前言
回顧一下上一篇加餐,
1 | libxcselect.dylib |
我們最後發現所有Xcode Command Line 都會先被導向 xcrun_main,也就是 xcrun。
於是xcrun就成了第一個探討對象
xcrun
xcrun 本名 : command-line tool runner,
如果把第一篇說的xcode-select形容成多組Command Line tools中的引路人,
xcrun就可以理解為某一組Command Line tools的敲門磚。
先來看xcrun的man, man xcrun
描述裡說的,跟 xcode-select基本上大同小異,例如:
1 | xcrun provides a means to locate or invoke developer tools from the command-line, without requiring users to modify Makefiles |
不外乎就是說可以再多組Command Line Tools裡面找到定位到該執行的指令。
描述甚至在還提到了xcode-select
,就像我上面說的要走到真正的executable,
是 xcode-select(引路人)、xcrun(敲門磚) 兩位相輔相成才走得到。
由xcode-selct -s 決定的xcode command Line路徑,xcrun再依照這路徑 定位/執行命令。
把第一篇的這張圖擴充一下:
Usage
已 Command line tools 裡的 clang
為例:
作為參考, xcode-select 的 path
xcode-select -p
/Applications/Xcode.app/Contents/Developer
xcrun clang
- 此指令等價於執行以下指令 ⬇️
- clang
- /usr/bin/clang == (which clang) 詳情參考上一篇加餐
- /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
- 此指令等價於執行以下指令 ⬇️
xcrun --find clang
- /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
xcrun --find git
- /Applications/Xcode.app/Contents/Developer/usr/bin/git
Futher More
一般介紹xcrun的文章到這邊大概就會止住了,大概的總結:xcrun 後面接指令就可以怎麼樣怎麼樣,然後接著介紹後面的指令。
但看到 xcrun --find clang
& xcrun --find git
的輸出,
一個是
一個是
給我一個感覺就是 xcrun 除了走xcode-select指引的大路,自己裡面還有很多小路!
所以我想就這個問題在深挖 xcrun。而的確一組command line Tools裡還能在拆分成三類的指令
這三大類分別為 -
- Developer
- SDKs(Platforms)
- ToolChain
關於這三類之間的依賴,以及xcrun剩餘的用法,請允許我拖更到下一篇文章😅
reference: