2017-03-17 40 views
6

我想並行安裝XCode,並使用DEVELOPER_DIR環境變量在它們之間進行選擇。目標是使用xcrun -f --sdk macosx clang的結果來確定適當的C編譯器,然後在腳本或構建系統中使用它。DEVELOPER_DIR是否需要保持在環境中設置?

CC=$(DEVELOPER_DIR=<something> xcrun -f --sdk macosx clang)

我的問題是,是否DEVELOPER_DIR需要繼續使用由xcrun發現工具時,或者像上面做,設置是否它是確定的xcrun執行過程中只需設置它,然後在默認環境下使用返回的工具,但仍未設置DEVELOPER_DIR

換句話說,儘管xcrun顯然取決於DEVELOPER_DIR的值,那麼這些工具本身也依賴於它嗎?有沒有進行有意義的差異:

  • DEVELOPER_DIR=<whatever> command CC=$(xcrun -f --sdk macosx clang)
  • command CC=$(DEVELOPER_DIR=<whatever> xcrun -f --sdk macosx clang)

是第二個正確的?還是隻有第一個?

回答

1

我想要並排安裝XCode,並使用DEVELOPER_DIR環境變量在它們之間進行選擇。

可以安裝兩個或多個版本的Xcode。在它們之間進行選擇的通常方法是使用xcode-select命令,但該命令的手冊頁似乎表示您可以通過自己設置DEVELOPER_DIR環境變量來爲當前會話完成相同的操作。下面是爲--switch選項的文件說:

設置活躍的開發者目錄給定的路徑,例如 /Applications/Xcode-DP.app。該命令必須以超級用戶 權限運行(請參閱sudo(8)),並且會影響系統中的所有用戶。若要 設置無超級用戶權限的路徑或僅用於當前的 shell會話,請使用DEVELOPER_DIR環境變量而不是 (請參閱環境)。

不過,你也應該注意環境中的部分中給出的建議是:

注意,由於歷史原因,開發商目錄被認爲 是Xcode應用程序內的顯影劑內容目錄 (例如/Applications/Xcode.app/Contents/Developer)。您可以將環境變量 設置爲實際開發人員內容 目錄或Xcode應用程序目錄 - 代碼選擇 提供的墊片將自動將環境變量 轉換爲完整的開發人員內容路徑。

所以你的問題<whatever>應指定完整路徑Developer目錄,而不是僅僅在Xcode應用程序。

換句話說,儘管xcrun顯然取決於DEVELOPER_DIR的值,但工具本身也依賴於它嗎?有沒有進行有意義的差異:

DEVELOPER_DIR=<whatever> command CC=$(xcrun -f --sdk macosx clang)

使用xcrun找到的工具,這樣你可以自己調用它們和擔心時設置和取消DEVELOPER_DIR似乎過於複雜。根據xcode-select文檔,所有「墊片」都尊重DEVELOPER_DIR設置。這裏的「Shims」是指/usr/bin中的Xcode命令。只要該環境變量設置正確,就可以調用'/ usr/bin/clang'而不是xcrun找到的東西,而/usr/bin/clang將調用DEVELOPER_DIR中的clang版本。據推測,你問這個問題是因爲你正在編寫某種構建腳本,所以在該腳本的早期設置DEVELOPER_DIR,然後使用/usr/bin命令應該沒有問題。

command CC=$(DEVELOPER_DIR=<whatever> xcrun -f --sdk macosx clang)

程序繼承父進程的環境。在這裏,您找到要使用的clang的正確副本,但是您將在未設置DEVELOPER_DIR的環境中調用它。這是否重要取決於您使用的工具是否調用任何其他工具。我真的不知道是否有任何工具可以調用其他工具,但似乎合乎邏輯的是,像xcodebuild這樣的工具會調用其中的很多工具,因此取決於DEVELOPER_DIR被正確設置。

簡而言之,在您的構建腳本中根據需要設置DEVELOPER_DIR沒有任何缺點,並且試圖僅在您撥打xcrun時調用DEVELOPER_DIR似乎不如替代方法可靠。

相關問題