Macos MacClang安装似乎覆盖了GCC安装

Macos MacClang安装似乎覆盖了GCC安装,macos,gcc,clang,Macos,Gcc,Clang,Mac 10.13.6这里是高塞拉山。我是C开发新手,我正在尝试使用最新的稳定/推荐的GCC版本进行设置,我相信(这里请保持诚实)是10.2 当我去终端查看我安装了什么时: $ gcc --version Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 9.1.0 (cl

Mac 10.13.6这里是高塞拉山。我是C开发新手,我正在尝试使用最新的稳定/推荐的GCC版本进行设置,我相信(这里请保持诚实)是10.2

当我去终端查看我安装了什么时:

$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$ gcc -dumpversion
4.2.1
好的…在输出中看到LLVM/clang相关的东西让我很惊讶。所以我试着这样做:

$ clang --version
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
type gcc-10
gcc-10 is hashed (/usr/local/bin/gcc-10)
所以它几乎就像。。。我安装了
clang
gcc
,但是我的
clang
安装已经同化了我的gcc安装?!否则,
gcc--version
输出引用会发出叮当声吗

这是典型的Mac设置吗


要在我的机器上正确安装GCC 10.2,我需要做些什么?

以下是一些简单的事实、陈述和观察,试图解释发生了什么:

  • Apple
    clang/LLVM
    编译器与macOS一起提供
    Clang
    是一种“前端”,可以解析
    C
    C++
    Objective-C
    ,直至
    LLVM
    (称为“后端”)可以编译的内容

  • Clang/LLVM
    位于
    /Applications/Xcode.app/某处

  • 苹果还提供了一个只运行
    clang
    /usr/bin/gcc
    。我不知道他们为什么这样做——这对我来说似乎没有多大帮助——但他们没有回答我的问题

  • 苹果将其二进制文件(程序)放入
    /usr/bin
    。这是macOS不可分割的一部分,你不应该触摸或更改其中的任何东西,如果你这样做,你就是在自找麻烦。此警告也适用于Python


如果您想要真正、可爱的GNU编译器集合(GCC),其中包括
GCC
g++
gfortran
编译器,您最好的选择是从IMHO获得它们。我不会把安装说明放在这里,因为它们可能会过时,所以您应该使用自制网站上的安装说明

一旦安装了自制,您就可以通过以下方式安装GNU编译器集合(GCC)

brew install gcc
在此之后,您将在
/usr/local/bin
中拥有所有可爱的GNU编译器集合(GCC),因此您应该将其放在路径中,靠近开头,并且在任何情况下放在
/usr/bin
之前,使用:

export PATH=/usr/local/bin:$PATH
通常,您还应该在登录配置文件或系统登录配置文件中添加类似的行,以便在您或任何其他用户每次登录时都进行设置

我们来看看,

ls /usr/local/bin/gcc* /usr/local/bin/g++*

/usr/local/bin/gcc-10
/usr/local/bin/g++-10
根据版本和更新,您将有以下可用程序:

gcc-10          # the real GNU C compiler
g++-10          # the real GNU C++compiler
gfortran        # GNU fortran compiler
您可以通过以下方式检查其版本:

gcc-10 -v
g++-10 -v
gfortran -v

现在您了解了自制,以下是一些更简单的事实和观察结果:

  • 为您提供二进制文件(程序)的人员(不是操作系统供应商)应该将他们的东西放在
    /usr/local
    中,以表明它只是本地安装的程序,而不是核心macOS操作系统的一部分

  • 自制性能良好,在
    /usr/local/ceral
    中安装二进制文件(程序),然后通常从
    /usr/local/bin/PROGRAM
    到ceral进行符号链接。所有这些都不会影响苹果提供的产品

  • 如果要运行自制的版本的命令,应首先在路径上设置
    /usr/local/bin

让我们看看这些符号链接:

ls -l /usr/local/bin/g*10

lrwxr-xr-x  1 mark  admin  31 21 Aug 16:41 /usr/local/bin/g++-10 -> ../Cellar/gcc/10.2.0/bin/g++-10
lrwxr-xr-x  1 mark  admin  31 21 Aug 16:41 /usr/local/bin/gcc-10 -> ../Cellar/gcc/10.2.0/bin/gcc-10

如果您想知道在输入命令时实际运行的是什么,请像下面这样使用
类型
命令

type gcc
gcc is hashed (/usr/bin/gcc)
这告诉您,如果您运行
gcc
,您实际上将运行
/usr/bin/gcc
,我们知道它来自苹果公司,因为它位于
/usr/bin


现在试试这个:

$ clang --version
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
type gcc-10
gcc-10 is hashed (/usr/local/bin/gcc-10)
这告诉您,如果您运行
gcc-10
,您将实际运行
/usr/local/bin/gcc-10
,我们知道它来自自制,因为它位于
/usr/local/bin