使用自制,gcc和LLVM与C ++ 11(Using homebrew, gcc and llvm

2019-08-05 08:01发布

这里是我的问题:我想使用的任何GCC或铛提供C ++ 11种功能。 不过,我有以下要求:

  1. 我使用的是Mac
  2. 我依赖着一串由自制软件提供的( 真的不想编译它们自己)库。 具体地说OSG,其本身依赖于一个其他吨库。 而提高,虽然我总是可以编译自己。

自制似乎只想使用GCC(请纠正我,如果我错了)。 我找不到任何选项,切换到LLVM来代替。 虽然我知道这可能的事实是,并非所有库兼容LLVM又是因为,这仍然将是那些一个不错的功能。

海合会的MAC自带预装的gcc版本是4.2。 GCC 4.2不具有C ++要求11点的特征。 我已经安装了通过自制软件4.7,但对于如何设置自制的搜索使用它都说不这样做(GCC 4.2的Mac是不是香草版本,所以在4.7版本我将无法编译有些事情)。

我的问题是:有没有人有他们所实施来解决这个问题的任何建议或修正? 我应该放弃自制? 有谁知道,如果家酿有一个计划切换到LLVM的未来? 有没有人有如何处理这些不兼容任何升级计划?

我看不出自制如何能继续从长远来看依赖于GCC 4.2,但没有发现对此事的任何真正的讨论。

Answer 1:

在Mac上的默认GCC是GNU不是真正的GCC。 这是LLVM-GCC其实,这是GCC的一个分支。 几年前,LLVM-GCC被终止,并代之以DragonEgg ,这是一个GCC插件使用LLVM的GCC后端。

LLVM-GCC仅仅是一个编译器前端,其作用是利用GCC前端翻译的源代码转换成LLVM IR [ 简介LLVM 11.3]。 一旦IR产生,LLVM后端将使用它来生成二进制代码。 这一步无关与海湾合作委员会。

上述目标是完全由10.7,其成分都被铛,由LLVM提供一个前端编译实现。

但苹果仍然保持LLVM-GCC和GCC运行库。 我想其目的可能是提供了一个机会,编译一些代码GCC只。

现在让我们来回答你的问题:

  • 如果您想使用C ++ 11点的特性,使用clang++ -stc=c++11 -stdlib=libc++来代替。 而铛可能已经支持的所有C ++ 11种功能 。
  • 如果你想支持自制软件LLVM,它已经支持,至少在后端。
  • 如果你想使用铛作为编译器前端自制的,这取决于自制软件的时间表。 例如,可以追加--with-c++11的参数使用铛编译boost.But你不能使用这个参数时, brew install autoconf 。 事实上,一些组件可能无法正确地编制铿锵。
  • 如果你知道它可以通过铛但自制编译还不支持,你必须砍在相应的Ruby脚本$HOMEBREW_ROOT/Library/Formula目录。 幸运的是,在大多数情况下,替代./configure blablabla./configure blablabla CXX=clang++ -stc=c++11 -stdlib=libc++效果很好。 顺便说一句,如果你破解成功后,请拉请求自制 。

所以,尝试一下,有乐趣。



Answer 2:

我有一个OS X山狮的环境和使用C ++ 11。 在这个答案,我就打断你的要求不编译你自己的东西。

我用自制和,我必须说,我劝你还是放弃这取决于它为您提供铛和的libc ++和它的所有公式与他们建立。

我做了什么,和我一样,是

  • 克隆LLVM,铛,并从仓库的libc ++。
  • 安装到/opt/local ,并把/opt/local/bin在顶部上/etc/paths
  • 建立自己的开发的东西与我的新铿锵。
  • 让自制软件安装类似Git和东西我不会为开发工具,只需使用。

我是按照其安装到铛构建指令/opt/local

对于的libc ++,一个细节:在运行后buildit剧本,我已经符号链接的包括目录/opt/local/lib/c++/v1 (上铿锵/opt/local查找此为默认目录),也符号链接的库到/opt/local/lib/ (但看看这二进制文件不会自动链接到libc ++上/opt/local/lib ,你必须使用install_name_tool为)。



Answer 3:

使用

clang++ -std=c++11 -stdlib=libc++ 

您还可以安装自制-的DUP最新的gcc

brew install [flags] https://raw.github.com/Homebrew/homebrew-dupes/master/gcc.rb


Answer 4:

对于LLVM, brew install --HEAD llvm 。 要使用铿锵或冲泡安装GCC,加上--with-clang--with-gcc=gcc-xx其中xx是你想要的版本。



文章来源: Using homebrew, gcc and llvm with C++ 11