我可以在 MacOS X 10.11 上让 gcc/g++ 指向 ACTUAL gcc/g++ 吗?

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

这真的很烦人。出于某种原因,在 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

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

原因有二:

  1. 我喜欢让我的电脑按照我的要求去做。
  2. 显然 clang++ 使用与 g++ 不同的 c++ 标准库编译东西,这导致我在编译和 link 我的东西时遇到问题 g++-5 (ACTUAL g++,通过自制软件安装)针对 CppUnit。

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

在您的 PATH 中,在 /usr/bin 之前,包含一个名为 gcc 的符号 link 指向 /…/bin/gcc-5.

的目录

最新的 Mac OS X 不让你改变 /usr,据我所知,所以这个保守的解决方案是唯一可用的。

when I invoke those commands, both from the terminal and through makefiles.

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

Apple 实际上并没有提供 gccg++,尽管(可能只是被误导了)他们使用别名来假装 clang 是相同的。

您可以 安装 gccg++MacPorts (also with homebrew)。我使用 MacPorts,它将其可执行文件放在 /opt/local/bin.

使用 MacPorts,我看到这些当前可用的 ports(必须编译才能在自己的机器上运行的程序),使用此命令

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,它建立一个符号 link,例如,从 gccgcc49brew 有类似的东西。根据 How can I brew link a specific version?,您将使用

brew switch gcc-package-name package-version

例如,(猜测有效名称)

brew switch gcc 4.9