これが私の問題です:gccまたはclangのいずれかによって提供されるC++ 11機能を使用したい。ただし、次の要件があります。
Homebrewはgccのみを使用したいようです(間違っている場合は修正してください)。代わりにLLVMに切り替えるオプションが見つかりません。これは、まだすべてのライブラリがLLVMと互換性があるわけではないという事実が原因である可能性があることを理解していますが、それでも、互換性のあるライブラリにとっては優れた機能です。
GccのMacにプリインストールされているgccのバージョンは4.2です。 gcc 4.2には、必要なc ++ 11機能がありません。 homebrew経由で4.7をインストールしましたが、homebrewを使用するように設定する方法を検索すると、すべて実行しないでください(Macのgcc 4.2はVanillaバージョンではないため、入手した4.7バージョンはコンパイルできません。いくつかのこと)。
私の質問は次のとおりです。この問題を回避するために実装した提案や修正はありますか?自作をあきらめるべきですか? Homebrewが将来LLVMに切り替える計画があるかどうか誰かが知っていますか?これらの非互換性に対処する方法について、アップグレード計画を持っている人はいますか?
自作が長期的にgcc4.2にどのように依存し続けることができるかはわかりませんが、この問題に関する実際の議論は見つかりませんでした。
MacのデフォルトのGCCは、GNUの実際のGCCではありません。実際には、GCCのブランチであるLLVM-GCCです。数年前、LLVM-GCCは終了し、 DragonEgg に置き換えられました。これは、LLVMをGCCバックエンドとして使用するためのGCCプラグインです。
LLVM-GCCは単なるコンパイラフロントエンドであり、その役割はGCCフロントエンドを使用してソースコードをLLVM IRに変換することです[ LLVMの概要 11.3]。 IRが生成されると、LLVMバックエンドはそれを使用してバイナリコードを生成します。このステップはGCCとは何の関係もありません。
上記の目標は10.7から完全に達成され、そのコンポーネントはすべてLLVMが提供するフロントエンドであるclangによってコンパイルされました。
しかし、AppleはまだLLVM-GCCおよびGCCランタイムライブラリを保持しています。その目的は、一部のコードGCCのみをコンパイルする機会を提供することかもしれません。
それでは、あなたの質問に答えましょう:
clang++ -stc=c++11 -stdlib=libc++
を使用してください。そして clangはすでにすべてのc ++ 11機能をサポートしているかもしれません 。--with-c++11
引数を追加して、clangを使用してboostをコンパイルできます。ただし、brew install autoconf
の場合はこの引数を使用できません。実際、一部のコンポーネントはclangによって正しくコンパイルされない場合があります。$HOMEBREW_ROOT/Library/Formula
ディレクトリでハックする必要があります。幸い、ほとんどの場合、 ./configure blablabla
と./configure blablabla CXX=clang++ -stc=c++11 -stdlib=libc++
はうまく機能します。ちなみに、ハッキングが成功した場合は、 homebrew にプルリクエストを送信してください。だから、それを試して楽しんでください。
OS X Mountain Lion環境があり、C++ 11を使用しています。この回答では、自分のものをコンパイルしないという要件を破ります。
私はHomebrewを使用していますが、clangとlibc ++、およびそれらを使用して構築されたすべての数式を提供するために、Homebrewに依存することを諦めることをお勧めします。
私がやったこと、そして私が好きなことは、
/opt/local
にインストールし、/opt/local/bin
を/etc/paths
の一番上に配置します。/opt/local
にインストールするためのclangビルド手順に従いました。
Libc ++の場合、1つの詳細:buildit
スクリプトを実行した後、includeディレクトリを/opt/local/lib/c++/v1
にシンボリックリンクし(/opt/local
のclangはこれをデフォルトディレクトリとして検索します)、またシンボリックリンクしましたlibsを/opt/local/lib/
に(ただし、バイナリは/opt/local/lib
のlibc ++に自動的にリンクしないように見えます。そのためには install_name_tool を使用する必要があります)。
使用する
clang++ -std=c++11 -stdlib=libc++
homebrew-dupsから最新のgccをインストールすることもできます
brew install [flags] https://raw.github.com/Homebrew/homebrew-dupes/master/gcc.rb