深入淺出 Xcode 命令列(2)-xcrun 基礎

Xcode命令列 = Xcode Command Lines Tool

前言

回顧一下上一篇加餐,

1
2
3
4
5
6
7
libxcselect.dylib
->
_xcselect_invoke_xcrun
->
libxcrun.dylib
->
xcrun_main

我們最後發現所有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
2
xcrun  provides a means to locate or invoke developer tools from the command-line, without requiring users to modify Makefiles
or otherwise take inconvenient measures to support multiple Xcode tool chains

不外乎就是說可以再多組Command Line Tools裡面找到定位到該執行的指令。

描述甚至在還提到了xcode-select,就像我上面說的要走到真正的executable,

是 xcode-select(引路人)、xcrun(敲門磚) 兩位相輔相成才走得到。

由xcode-selct -s 決定的xcode command Line路徑,xcrun再依照這路徑 定位/執行命令。

第一篇的這張圖擴充一下:

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 的輸出,

一個是 /Toolchains/XcodeDefault.xctoolchain/usr/bin/clang

一個是 /usr/bin/git

給我一個感覺就是 xcrun 除了走xcode-select指引的大路,自己裡面還有很多小路!

所以我想就這個問題在深挖 xcrun。而的確一組command line Tools裡還能在拆分成三類的指令

l0Exdm9UbTHAFcJi0

這三大類分別為 -

  • Developer
  • SDKs(Platforms)
  • ToolChain

關於這三類之間的依賴,以及xcrun剩餘的用法,請允許我拖更到下一篇文章😅

reference:

Comments

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×