【问题标题】:Why did installing Xcode command line tools change what 'gcc --version' reports为什么安装 Xcode 命令行工具会改变 'gcc --version' 报告的内容
【发布时间】:2013-10-27 20:27:05
【问题描述】:

最近我通过 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

但是answers here on 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又有什么意义呢?

【问题讨论】:

  • 你知道我确实遇到过这个问题,看起来 gcc 现在实际上运行的是 clang,这并不是最糟糕的事情,因为 clang 总体上更新更好,但我想要两者兼得
  • @aaronman:你是在使用 AppStore 后看到这个变化,还是在手动更新命令行工具后看到这个变化(我仍然对是否需要手动安装感到困惑)。
  • 不记得它是什么时候发生的,因为我很少使用 gcc,我希望我不需要进行任何形式的完整安装来解决这个问题
  • 你能解决这个问题吗
  • @aaronman:我不确定“修复”会涉及什么。首先,我想知道它的含义以及它发生的原因。

标签: xcode gcc osx-mavericks


【解决方案1】:

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

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

    $ls -l /usr/include

    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 方式推出的,完全无声无息。

【讨论】:

    猜你喜欢
    • 2019-03-02
    • 2014-01-16
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多