14

最近我通过 AppStore 将 OS 10.9 上的 Xcode 更新到了 5.0.1 版本。在我看来,此更新还更新了命令行工具,例如运行gcc --version生产

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

但是,SE 上的答案表明情况并非如此,需要单独下载和安装命令行工具。我这样做了,最终得到了相同的工具版本,但有细微的差别。例如,现在运行运行gcc --version产生

gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

这是事情应该如何工作的 - 这是否代表了当前 Xcode 命令行工具的预期行为,还是它是通过直接下载安装的特有的(与通过 AppStore 与 Xcode 一起安装;如果这甚至可能的话)?

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1从到更改的意义是/usr/include/c++/4.2.1什么?

4

1 回答 1

5

我将用一个列表来构建我的答案,以便您了解全貌,您的主要问题的答案在最后一个列表项中得出结论:

  • 自 Mavericks 以来,默认编译器套件一直是 Clang/LLVM,而不是 GNU GCC。gcc为和分别指向 Clang 和 Clang++的同义词g++已被保留,以保持向后兼容性,并且由于 Clang 与 GCC 非常向后兼容,因此没有理由不这样做。
  • 我认为从 XCode 6 开始,XCode 会自动将命令行开发人员工具捆绑在 XCode 的主安装和 .app 包中。默认框架和工具包也是如此。完整的命令行开发目前还没有完全投入使用,只是启用了 XCode 开发。
  • 但是,为了在命令行中成功进行开发,必须xcode-select --install在终端应用程序中执行并按照说明进行操作。
  • 鉴于 SDK 现在已捆绑并组织在 XCode.app 捆绑包内的目录结构中,您注意到 gxx-include-dir 的变化是由于现在 /usr/include 只是一个软链接到正确的具体的地方包括:

    $ls -l /usr/包括

    lrwxr-xr-x 1 根轮 112 Feb 2 19:08 /usr/include -> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include /

最后一点,不一定是坏事,xcode-select(1)现在可以使用命令来管理活动的 SDK。我希望这能为那些困惑的人澄清一点,因为所有这些(相当大的)变化都是以经典的 Apple 方式推出的,完全无声无息。

于 2015-03-17T09:16:54.767 回答