25

我相信一定有办法做到这一点。你可能知道 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。我假设这只是更改路径变量或类似变量的一种情况,但我对此感到困惑。

任何帮助表示赞赏。谢谢。

4

6 回答 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(仅命令行)。

于 2009-07-22T14:14:23.277 回答
18

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

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

更新:关于命令行,我将把默认编译器的决定留给 Leopard。如果您想通过 Autotools configure 等工具使用不同的编译器,您最好定义 CC 变量。

CC=gcc-4.2 ./configure

或者

export CC=gcc-4.2
于 2009-07-22T13:58:26.823 回答
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
  • zlib
  • 消费税

但是...我无法让 Boost 1.39 承认环境变量,因此要使用 GCC 4.2 编译 Boost,我需要更改 /usr/bin/ 中的符号链接,以便它们指向 gcc v4.2

在 Boost 库用 GCC 4.2 完成编译之后,我将符号链接恢复到原始系统版本 gcc-4.0。

于 2009-08-25T19:23:14.577 回答
3

我的经验(有限),更改 .profile 中的 CC 不会更改 Lion(10.7.2)默认为 i686-apple-darwin11-llvm-gcc-4.2。我想知道这是否与 Apple 自己的符号链接有关:a partial: 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

根据 Martin v. Löwis 的回答,我对打破这些并将我自己的添加到 usr/bin/gcc-4.2 持谨慎态度。

于 2011-10-26T13:40:10.887 回答
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
于 2011-07-22T16:38:22.140 回答
2

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

xcode-select --switch /path_to_tool_suite

正如我所说,我不是 100% 对此,但我相信它将为所有程序设置默认值,包括终端和其他调用操作系统以使用编译器的应用程序。

于 2013-02-19T18:30:52.167 回答