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

时间:2009-07-22 13:44:13

标签: xcode macos gcc osx-leopard

我确信必须有办法做到这一点。您可能已经知道Leopard的最新版Xcode(事实上我认为Xcode的所有版本)都带有GCC 4.0.1和GCC 4.2。 GCC 4.0.1是默认的系统编译器,而GCC 4.2是可以在Xcode项目设置中设置的可选编译器。

有谁知道如何将GCC 4.2设置为所有选项的默认编译器?无论我在Xcode中做什么,最好是命令行使用以及配置脚本仍然使用GCC 4.0.1而不是GCC 4.2。我假设它只是一个改变路径变量的例子或者其他一些但是我很难接受这个。

感谢任何帮助。感谢。

6 个答案:

答案 0 :(得分:19)

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

  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(只有命令行)。

答案 1 :(得分:18)

在项目或目标信息窗口中设置构建设置“C / C ++编译器版本”(GCC_VERSION)。

或者在目标信息窗口中,您可以将“系统C规则”更改为您喜欢的GCC版本。

更新:关于命令行,我会让Leopard决定什么应该是默认编译器。如果要使用与Autotools配置等工具不同的编译器,最好定义CC变量。

CC=gcc-4.2 ./configure

export CC=gcc-4.2

答案 2 :(得分:16)

由于既不是 Apple也不是Darwin Ports都有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。

答案 3 :(得分:3)

我的经验(有限),改变.profile中的CC并没有改变Lion的(10.7.2)默认为i686-apple-darwin11-llvm-gcc-4.2。我想知道这是否与Apple自己的sym链接有关: 部分: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

根据Martinv.Löwis的回答,我对打破这些并将其自己添加到usr / bin / gcc-4.2时保持警惕。

答案 4 :(得分:2)

由于我需要构建忽略CC env的东西并且我最终经常切换,我在Python中编写了一个简单的gcc_select。以为我也可以在这里发布。使用arg 4.0或4.2调用它或不调用arg来查看当前的符号链接。如果您的版本不是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

答案 5 :(得分:2)

我可能错了,但我认为这就是Xcode-select的用途?

xcode-select --switch /path_to_tool_suite

正如我所说,我不是百分之百,但我相信它会设置所有程序的默认设置,包括终端和其他调用操作系统的应用程序使用编译器。