我想并行安装 XCode,并使用 DEVELOPER_DIR 环境变量在它们之间进行选择。
可以安装两个或多个版本的 Xcode。在它们之间进行选择的通常方法是使用xcode-select
命令,但该命令的手册页似乎确实说您可以通过自己设置DEVELOPER_DIR
环境变量来为当前会话完成相同的事情。以下是该--switch
选项的文档说明:
将活动开发者目录设置为给定路径,例如 /Applications/Xcode-DP.app。此命令必须以超级用户权限运行(请参阅 sudo(8)),并将影响系统上的所有用户。要设置没有超级用户权限或仅用于当前 shell 会话的路径,请改用 DEVELOPER_DIR 环境变量(请参阅 ENVIRONMENT)。
但是,您还应该注意“环境”部分中给出的建议:
请注意,由于历史原因,开发者目录被认为是 Xcode 应用程序中的开发者内容目录(例如 /Applications/Xcode.app/Contents/Developer)。您可以将环境变量设置为实际的 Developer 内容目录或 Xcode 应用程序目录——代码选择提供的 shim 将自动将环境变量转换为完整的 Developer 内容路径。
所以<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
. 只要正确设置了该环境变量,您就可以调用 '/usr/bin/clang' 而不是找到的任何内容,xcrun
并将/usr/bin/clang
调用. 据推测,您问这个问题是因为您正在编写某种构建脚本,因此在该脚本的早期设置然后使用命令应该没有问题。clang
DEVELOPER_DIR
DEVELOPER_DIR
/usr/bin
•command CC=$(DEVELOPER_DIR=<whatever> xcrun -f --sdk macosx clang)
程序从其父进程继承环境。在这里,您可以找到clang
要使用的正确副本,但您将在DEVELOPER_DIR
未设置的环境中调用它。这是否重要取决于您使用的工具是否调用任何其他工具。老实说,我不知道是否有任何工具确实调用了其他工具,但是像这样的工具xcodebuild
会调用其中许多工具并因此依赖于DEVELOPER_DIR
正确设置似乎是合乎逻辑的。
简而言之,DEVELOPER_DIR
在构建脚本中根据需要进行设置没有缺点,并且尝试仅在调用中指定它xcrun
似乎不如替代方法可靠。