在Mac OS X Leopard上将GCC 4.2设置为默认编译器

26

我相信肯定有办法可以做到这点。如您所知,Leopard 上最新版本的 Xcode(实际上我认为所有版本的 Xcode)都自带 GCC 4.0.1 和 GCC 4.2。GCC 4.0.1 是默认的系统编译器,而 GCC 4.2 则是可选的编译器,您可以在 Xcode 项目设置中进行设置。

有谁知道如何将 GCC 4.2 设置为所有选项的默认编译器?最好能够在命令行使用,以及使配置脚本仍然使用 GCC 4.0.1 而不管在 Xcode 中做了什么。我猜想这只是一个路径变量或类似东西的问题,但我对此束手无策。

非常感谢任何帮助。

6个回答

21

所有配置脚本的命令行用法:

  cd /usr/bin
  rm cc gcc c++ g++
  ln -s gcc-4.2 cc
  ln -s gcc-4.2 gcc
  ln -s c++-4.2 c++
  ln -s g++-4.2 g++

记录当前的链接目标,以便需要时可以恢复。

如果您不想更改系统范围内的设置,请在 /usr/bin 之前添加一个目录到 PATH(比如说,$HOME/bin),并在那里创建符号链接。

我没有测试这是否会影响 Xcode 项目,因为我不使用 Xcode(只用命令行)。


这个以前是由gcc_select脚本处理的,但似乎Leopard / Xcode 3.1不再提供它了?我已经好几年没用过OS X了,所以有点不太了解... - ephemient
谢谢,问题已经解决了。顺便提一下,如果有其他人打算这样做,我强烈建议将新的符号链接放在不同的目录中,这样如果您想要恢复原始设置,只需删除符号链接或将它们移动到另一个目录即可。 - Cromulent
Martin,有个相关的问题,你如何告诉 setup.py / pydistutils.cfg 使用哪个 CC 和哪个-arch?例如,我想只使用 gcc-4.2 -arch ppc(因为我的 gcc-4.2 没有 /usr/bin/i686-apple-darwin8-g++-4.2.1)。谢谢。 - denis
@Denis:他们在安装的Makefile中使用CC(distutils.sysconfig.get_makefile_filename())。原则上,设置CC和CXX环境变量应该覆盖它。 - Martin v. Löwis
它在OS X 10.10.3上运行良好(六年后的未来!你会认为这不再是一个问题)。 - Parzival
我强烈推荐llDan的答案;那更加灵活。 - juanmirocks

18
在“项目或目标信息”窗口中设置构建设置的“C/C++编译器版本”(GCC_VERSION)。
或者在"目标信息"窗口中,您可以更改"系统C规则"以使用您喜欢的GCC版本。
更新:关于命令行,我会让Leopard决定默认编译器应该是什么。如果您想使用不同的编译器来配置Autotools等工具,最好定义CC变量。
CC=gcc-4.2 ./configure
或者
export CC=gcc-4.2

不幸的是,我已经了解了这些内容,但它们是针对每个项目的。我谈论的是当您从命令行调用GCC时。无论我在Xcode中设置什么规则,它都将始终使用命令行中的GCC 4.0.1版本。 - Cromulent
我的错,抱歉。我正在更新它。 - IlDan
6
与使用rm/ln -s解决方案相比,我认为“export CC=gcc-X.Y”更实用(并且类Unix),它容易恢复到原始状态,易于在用户/系统范围内设置,只需要编辑.bash_profile(或您喜欢的shell rc)即可。 - lsdr

16

由于苹果和达尔文端口都没有gcc_select程序来更改系统编译器的默认版本(就像在GNU / Linux上存在的那样),我想用XCode(以及系统的其余部分)保险起见,并建议保留符号链接。同时设置覆盖使用哪个版本的GCC的环境变量。

在我的.profile文件中,我有以下内容

export CC=/usr/bin/gcc-4.2
export CPP=/usr/bin/cpp-4.2
export CXX=/usr/bin/g++-4.2 

我使用 GCC 4.2 成功从源代码编译了以下库:

  • OpenSSL
  • libjpeg
  • libpng
  • zlib
  • gst

然而... 我无法让 Boost 1.39 认可环境变量,所以为了使用 GCC 4.2 编译 Boost,我需要更改 /usr/bin/ 中的符号链接,使它们指向 gcc v4.2。

最终,在经过很长一段时间后,Boost 库使用 GCC 4.2 编译完成后,我将符号链接恢复到原始系统版本 gcc-4.0。


尝试过这个,但它并没有改变我的默认编译器。 - user124384

3

根据我的经验(有限),在.profile中更改CC并不会改变Lion(10.7.2)默认使用的i686-apple-darwin11-llvm-gcc-4.2。我想知道这是否与苹果自己的符号链接有关:

部分代码:ls -la /usr/bin | grep .*gcc.*

lrwxr-xr-x     1 root   wheel        12 25 oct 19:31 cc -> llvm-gcc-4.2
lrwxr-xr-x     1 root   wheel        12 25 oct 19:31 gcc -> llvm-gcc-4.2
lrwxr-xr-x     1 root   admin        32 25 oct 19:31 llvm-gcc-4.2 -> ../llvm-gcc-4.2/bin/llvm-gcc-4.2

我对于在usr/bin/gcc-4.2中破坏原有设置并添加自己的设置持谨慎态度,正如Martin v. Löwis所回答的那样。


2

由于我需要在忽略CC环境的情况下构建项目,并且经常需要切换,所以我用Python编写了一个简单的gcc_select。想着也许可以在这里发布一下。使用参数4.0或4.2或不带参数来调用它,以查看当前的符号链接。如果您有其他版本,则需要进行修改:

#!/usr/bin/python
import sys
import os

os.chdir('/usr/bin')

files = ['cc', 'gcc', 'c++', 'g++']

if '4.0' in sys.argv:
  ver = '4.0'
elif '4.2' in sys.argv:
  ver = '4.2'
else:
  print "Unknown gcc version.  Current setting:"
  os.system('ls -al %s' % ' '.join(files))
  sys.exit(1)

os.system('rm %s' % ' '.join(files))  
for f in files:
  os.system('ln -s %s-%s %s' % (f, ver, f))

print "Changed to gcc version %s" % ver

2
我可能错了,但我认为那就是Xcode-select的作用?
xcode-select --switch /path_to_tool_suite

正如我所说,我不是百分之百确定,但我认为这将设置所有程序的默认值,包括终端和其他调用编译器的应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接