我可以在MacOS X 10.11上使用指向实际gcc/g++的gcc/g++

Can I have gcc/g++ on MacOS X 10.11 pointing to the ACTUAL gcc/g++?

本文关键字:gcc g++ MacOS 我可以      更新时间:2023-10-16

这真的很烦人。出于某种原因,在MacOS X 10.11上(可能也在以前的版本上)有gccg++命令(在/usr/bin中,它们不是别名),当使用-v参数执行时,会给出:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.2.0
Thread model: posix

所以看起来他们实际上是在执行苹果的clang和clang++编译器。现在,当我从终端和通过makefile调用这些命令时,我真的需要我的计算机来执行gcc和g++。

原因有二:

  1. 我喜欢让我的电脑做我要求它做的事
  2. 显然,clang++使用与g++不同的c++标准库编译东西,这给我在编译和链接我的东西与针对CppUnit的g++-5(通过自制软件安装的实际g++)时带来了问题

有人知道gccg++实际调用gcc和g++的最佳方式是什么吗?

在您的PATH中,在/usr/bin之前,包含一个名为gcc的指向/…/bin/gcc-5的符号链接的目录。

据我所知,最新的Mac OS X不允许您更改/usr,因此这种保守的解决方案是唯一可用的。

当我从终端和通过makefile调用这些命令时。

如果您在.profile中调整PATH变量,这两种情况都将涵盖在内。

Apple实际上并没有提供gccg++,尽管(也许只是被误导了)他们制作别名来假装clang是一样的。

您可以使用MacPorts安装gccg++(也可以使用自制软件)。我使用MacPorts,它将其可执行文件放在/opt/local/bin中。

使用MacPorts,我可以看到这些当前可用的端口(必须编译才能在机器上工作的程序),使用命令

port list |grep gcc
gcc410                         @5-20140817     lang/gcc410 
gcc43                          @4.3.6          lang/gcc43 
gcc44                          @4.4.7          lang/gcc44 
gcc45                          @4.5.4          lang/gcc45 
gcc46                          @4.6.4          lang/gcc46 
gcc47                          @4.7.4          lang/gcc47 
gcc48                          @4.8.5          lang/gcc48 
gcc49                          @4.9.3          lang/gcc49
gcc5                           @5.2.0          lang/gcc5
gcc6                           @6-20151129     lang/gcc6
gccxml-devel                   @20150423       lang/gccxml-devel
gcc_select                     @0.1            sysutils/gcc_select
gccmakedep                     @1.0.3          x11/gccmakedep

根据其网页,brew也会做类似的事情,但会安装到/usr/local/bin中。

当我安装MacPorts时,它的安装程序更新了我的~/.profile,并将其添加到更新PATH:

# MacPorts Installer addition on 2015-10-03_at_14:17:30: adding an appropriate PATH variable for use with MacPorts.
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
# Finished adapting your PATH environment variable for use with MacPorts.

来自MacPorts的这些端口中的每一个都安装了具有不同名称的gcc,并且port脚本具有建立符号链接的功能select,例如从gccgcc49。CCD_ 28也有类似之处。根据How can I brew link a specific version?,你会使用

brew switch gcc-package-name package-version

例如,(猜测有效名称)

brew switch gcc 4.9