【问题标题】:Setting GCC 4.2 as the default compiler on Mac OS X Leopard将 GCC 4.2 设置为 Mac OS X Leopard 上的默认编译器
【发布时间】:2010-11-13 00:22:29
【问题描述】:

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

感谢任何帮助。谢谢。

【问题讨论】:

    标签: xcode macos gcc osx-leopard


    【解决方案1】:

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

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

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

    CC=gcc-4.2 ./configure
    

    export CC=gcc-4.2
    

    【讨论】:

    • 不幸的是,我已经知道这些,但它们是每个项目的。我说的是当您从命令行调用 GCC 时。无论我在 Xcode 中设置什么规则,它都将始终从命令行使用 GCC 4.0.1。
    • 我的错对不起。我正在更新它
    • 与 rm/ln -s 解决方案相比,我发现 'export CC=gcc-X.Y' 更实用(并且类似于 *nix)。如果出现问题很容易恢复,易于设置用户/系统范围,只需要编辑 .bash_profile(或您最喜欢的 shell rc)。
    【解决方案2】:

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

      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了,所以有点脱节了……
    • 谢谢,解决了这个问题。顺便说一句,如果其他人打算这样做,我强烈建议将新的符号链接放在不同的目录中,这样如果您想恢复到原始设置,您只需删除符号链接或将它们移动到不同的目录目录。
    • 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:他们在已安装的 Makefile (distutils.sysconfig.get_makefile_filename()) 中使用 CC。原则上,设置 CC 和 CXX 环境变量应该覆盖它。
    • 它在 OS X 10.10.3 上运行(六年后!你会认为这不再是问题了)。
    【解决方案3】:

    由于 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
    • 消费税

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

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

    【讨论】:

    • 试过这个并没有改变我的默认编译器。
    【解决方案4】:

    因为我需要构建忽略 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】:

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

      【讨论】:

        【解决方案6】:

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

        xcode-select --switch /path_to_tool_suite
        

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

        【讨论】:

          猜你喜欢
          • 2012-03-04
          • 2012-03-11
          • 1970-01-01
          • 2011-06-08
          • 1970-01-01
          • 2010-09-27
          • 2011-11-11
          • 2010-10-20
          • 2010-10-12
          相关资源
          最近更新 更多