DEVELOPER_DIR是否需要在环境中保持设置?

acm*_*acm 6 macos xcode environment-variables clang xcrun

我想并排安装XCode,并使用DEVELOPER_DIR环境变量在它们之间进行选择.这样做的目的是使用结果xcrun -f --sdk macosx clang来确定适当的C编译器,然后在脚本或构建系统中使用它.

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)

第二个是正确的吗?还是只有第一个?

Cal*_*leb 2

\n

我想要并行安装 XCode,并使用 DEVELOPER_DIR 环境变量在它们之间进行选择。

\n
\n\n

安装两个或更多版本的 Xcode 没问题。在它们之间进行选择的通常方法是使用该xcode-select命令,但该命令的手册页似乎确实表明您可以通过DEVELOPER_DIR自己设置环境变量来仅对当前会话完成相同的操作。以下是该--switch选项的文档内容:

\n\n
\n

将活动开发人员目录设置为给定路径,例如\n /Applications/Xcode-DP.app。此命令必须以超级用户权限运行(请参阅 sudo(8)),并将影响系统上的所有用户。要设置没有超级用户权限或仅用于当前 shell 会话的路径,请改用 DEVELOPER_DIR 环境变量(请参阅 ENVIRONMENT)。

\n
\n\n

但是,您还应该注意环境部分中给出的建议:

\n\n
\n

请注意,由于历史原因,开发人员目录被视为 Xcode 应用程序内的开发人员内容目录(例如 /Applications/Xcode.app/Contents/Developer)。您可以将环境变量设置为实际的开发人员内容目录或 Xcode 应用程序目录 - 提供的代码选择垫片将自动将环境变量转换为完整的开发人员内容路径。

\n
\n\n

因此,<whatever>您的问题中应该指定目录的完整路径Developer,而不仅仅是 Xcode 应用程序的路径。

\n\n
\n

换句话说,虽然 xcrun 显然确实依赖于 DEVELOPER_DIR 的值,但工具本身也依赖于它吗?之间是否存在有意义的区别:

\n\n

\xe2\x80\xa2DEVELOPER_DIR=<whatever> command CC=$(xcrun -f --sdk macosx clang)

\n
\n\n

使用xcrun查找工具以便您可以自己调用它们,并且担心何时设置和取消设置DEVELOPER_DIR似乎过于复杂。根据xcode-select文档,所有“垫片”都遵循该DEVELOPER_DIR设置。这里的“Shims”指的是/usr/bin. 只要正确设置该环境变量,您就可以调用 \'/usr/bin/clang\' 而不是任何找到的内容xcrun,并且/usr/bin/clang将调用. 据推测,您问这个问题是因为您正在编写某种构建脚本,因此在该脚本的早期设置然后仅使用命令应该没有问题。clangDEVELOPER_DIRDEVELOPER_DIR/usr/bin

\n\n
\n

\xe2\x80\xa2command CC=$(DEVELOPER_DIR=<whatever> xcrun -f --sdk macosx clang)

\n
\n\n

程序从其父进程继承环境。在这里,您找到了clang要使用的正确副本,但您将在DEVELOPER_DIR未设置的环境中调用它。这是否重要取决于您使用的工具是否调用任何其他工具。老实说,我不知道这些工具是否会调用其他工具,但类似的工具xcodebuild会调用其中许多工具,因此取决于DEVELOPER_DIR是否正确设置,这似乎是合乎逻辑的。

\n\n

DEVELOPER_DIR简而言之,在构建脚本中根据需要进行设置没有任何缺点,并且尝试仅在调用中指定它xcrun通常比替代方法更不可靠。

\n