【问题标题】:Why Macports does not show the apple xcode compiler through "port select gcc"?为什么 Macports 不通过“port select gcc”显示苹果 xcode 编译器?
【发布时间】:2015-08-25 07:26:16
【问题描述】:

最近我将我的 Mac 的 XCode 和命令行工具更新到了 6.4 版(我在 OSX Yosemite 10.10.5 上运行)。在我做了那个改变之后,为了用 MacPorts 安装一个新的包,我不得不运行一个“port selfupdate”。但是,在我这样做之后,我的系统出现了问题。特别是,通常的port select gcc 不会显示安装了 XCode 的苹果编译器。它只显示:

Available versions for gcc:
mp-gcc48
none (active)

我不得不说,试图解决一个编译问题(这就是我发现问题的方式),我卸载了一个或两个 mp-gcc 版本。不过,我记得苹果版本应该已经列在那里了。

要确保安装了苹果编译器:运行命令 xcode-select --install 会显示以下内容:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates

xcode-select -p 显示以下内容:

/Applications/Xcode.app/Contents/Developer

所以,编译器就在那里。我的~/.profile 文件包含以下行:

MacPorts Installer addition on 2013-05-13_at_00:53:37: adding an appropriate PATH variable for use with MacPorts.
export PATH=/opt/local/bin:/opt/local/sbin:$PAT

但是,事实上,这是我的 MacPorts 的常见变化。

有谁知道发生了什么?我需要在不破坏 MacPorts 环境的情况下使用苹果编译器。

提前致谢!

编辑:感谢您提供的好答案,所以确实none 是macport 的系统(xcode)安装。作为记录,我尝试选择 macports gcc 然后没有,看看是否有一个断开的链接,确实发生了这种情况:

sudo port select gcc mp-gcc48
Selecting 'mp-gcc48' for 'gcc' failed: symlink: /opt/local/etc/select/gcc/current -> mp-gcc48: file already exists

在我手动删除/opt/local/etc/select/gcc/current 后,port select gcc 命令运行良好,之后设置sudo port select gcc none 运行良好。

【问题讨论】:

  • 这是您要用于您的项目还是用于编译 Macport ports 本身的编译器?
  • 用于我的项目。我想保持原样离开 Macports 环境。
  • 我建议在你的Makefiles(或其他)中简单地使用CC=clang,或者明确地使用/usr/bin/clang

标签: xcode macos gcc macports


【解决方案1】:

端口选择让您可以为命令gccsudo port select gcc none 选择MacPorts 编译器,然后使用系统编译器。

即,您正在寻找的选项现在称为“无”。这是有道理的,因为 MacPorts 无法知道系统编译器是什么,或者即使安装了一个。根据 XCode 的版本,它可能是 clang 或 gcc。请注意,在较新版本的 XCode/OSX 上,没有 gcc,只有 clang,gcc/g++ 是指向 clang/clang++ 的链接。

编辑: 这对于所有可用的“端口组”现在都是一样的。例如,在我的系统上,以下配置处于活动状态:

port select --summary

Name       Selected     Options
====       ========     =======
clang      none         mp-clang-3.7 none
cython     cython34     cython27 cython34 none
db         none         db46 db48 none
gcc        none         mp-gcc47 mp-gcc49 mp-gcc5 none
ipython    ipython34    ipython27 ipython34 none
llvm       none         mp-llvm-3.5 mp-llvm-3.7 none
mysql      none         mysql56 none
nosetests  none         nosetests27 nosetests34 none
pip        pip34        pip34 none
python     python34     python26-apple python27 python27-apple python34 none
python2    python27     python26-apple python27 python27-apple none
python3    none         python34 none
sphinx     py34-sphinx  py27-sphinx py34-sphinx none
wxWidgets  none         wxWidgets-3.0 none

比如我想切换回系统默认的python,我说

sudo port select python none

对于python3(没有系统默认值),我说

sudo port select python3 none

【讨论】:

  • 这与 Macports 使用 python 的方式不同,其中可以显式选择苹果版本。通过 Macports 安装 clang 也不提供选择 apple-clang 的选项。
  • 我刚刚澄清了我的答案。事实上,现在所有端口组都采用这种方式,例如 python、clang 等。您总是 port select <portgroup> none 选择系统默认值。对于 python,似乎 python27-apple 出于某种原因留下了。不知道为什么。
  • 我在您的列表中看到了python26-applepython27-apple(对我来说也是如此),这令人困惑......
  • 啊,是的,你是对的。准确地说,有python26-applepython27-applenone。所以none 回退到系统默认值,即/usr/bin/python,而python26-apple 选择/usr/bin/python2.6python27-apple 选择/usr/bin/python2.7(两者都是/System/Library/Frameworks/Python.framework/... 的符号链接
  • 同意。那讲得通; Macports 可以处理 Apple 提供的程序的多个版本。
猜你喜欢
  • 2012-05-02
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多