【问题标题】:Does DEVELOPER_DIR need to remain set in the environment?DEVELOPER_DIR 是否需要在环境中保持设置?
【发布时间】:2017-08-09 06:46:19
【问题描述】:

我想并行安装 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)

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

【问题讨论】:

    标签: xcode macos environment-variables clang xcrun


    【解决方案1】:

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

    可以安装两个或多个版本的 Xcode。在它们之间进行选择的常用方法是使用xcode-select 命令,但该命令的手册页似乎确实说您可以通过自己设置DEVELOPER_DIR 环境变量来为当前会话完成同样的事情。 --switch 选项的文档是这样说的:

    将活动开发者目录设置为给定路径,例如 /应用程序/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 时指定它似乎不如替代方法可靠。

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 2016-07-02
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2015-07-21
      相关资源
      最近更新 更多