web-dev-qa-db-ja.com

C ++ 11に更新する方法は?

私はプログラミングに不慣れなので、言語の更新を経験したことはありません。 C++ 11のリリースに伴い、ラムダ式やスレッドなどのすべての新機能を利用したいと思います。私はこれを外部ライブラリで実行できることを知っていますが、母国語の機能を使用する方が便利です。

Xcode3.2.6のMacOS XSnowleopardでgcc4.2.1を使用しています

C++ 11機能の使用を開始するには、何をして更新する必要がありますか?

16
fdh

Xcode 4.1(またはSnow Leopard用に入手できる最新バージョン)に更新して、さらにいくつかのC++ 11機能を備えた新しいコンパイラーを入手できます。 SnowLeopardのXcode4.1でC++ 11のサポートを改善することについて、StackOverflowにいくつかの投稿があります。

ただし、Xcodeで利用できる最新のコンパイラでさえ、ラムダなどの一部のC++ 11機能をサポートしていません。最高のC++ 11サポートを得るには、新しいコンパイラ、gcc 4.6または4.7、またはClangをインストールする必要があります。

私は頻繁にソースから最新バージョンのclangをビルドします。他のオープンソースソフトウェアの構築に精通している場合は、それを行うのは難しくありません。 clangとllvm、http://llvm.org/git/llvm.githttp://llvm.org/git/clang.gitにはgitリポジトリを使用しています。開始するための手順は、Webサイトでも見つけることができます: http://clang.llvm.org/get_started.html 。 clangとllvmのソースを入手したら、それは./configure && make && Sudo make installだけです。 (これはリポジトリから直接出ているため、インストールする前にテストを実行することをお勧めします。llvmディレクトリでmakeの後にmake checkを実行し、それが終わったらcdをtools/clangに渡して実行します。 make test。すべて問題がなければ、Sudo make install

SnowLeopardにlibc ++が含まれていたかどうかは覚えていないので、それも入手する必要があるかもしれません。 http://libcxx.llvm.org/

すべてが構築およびインストールされたら、次のことができます。

clang++ -std=c++11 -stdlib=libc++ main.cpp && ./a.out

そして、あなたはちょうどほぼ最高のC++ 11サポートを持っているはずです。

Clangの最近のパッチにより、新しいC++プログラマーとして気付く可能性のある最後の機能のサポートが大幅に改善されました。まだいくつかの断片が残っていますが、3.1の時点で、そして私が知る限り、clangにはgcc4.7またはVC++ 11のいずれかが持つすべてのC++ 11機能があります。 libc ++は、C++ 11標準ライブラリ機能IMEに関してもギャップが最も少ないです(ただし、VC++の標準ライブラリも、ネイティブタイプとしてchar32_tやchar16_tなどの言語機能に追いつくと、かなり完成すると思います。そのため、標準の必須の特殊化が行われます。それらのタイプに使用できます)。

24
bames53

自作をインストールしている場合は、 この記事 から、2つのステップだけです。

brew tap homebrew/dupes
brew install gcc --enable-cxx --enable-fortran --use-llvm
1
Pei Z

基本的には、新機能をサポートするツールチェーンを入手するだけで済みます。 macosxでは、GCCまたはclang ++のいずれかになります。必要に応じて、特定のバージョンをダウンロード/コンパイルする必要がある場合があります(つまり、試してみたい機能が事前にパックされたコンパイラバンドルに含まれていないが、リポジトリで利用できる場合)。

Subversionからclang ++の最新トランクをダウンロードしてコンパイルし、テストを行って、SnowLeopardにmacportsを搭載したg ++ 4.6をインストールしました。環境のセットアップに問題があったことを覚えていますが、どのコンパイラーが問題を引き起こしたのか、またはどのように解決したのかをよく覚えていません。グーグルはそこのあなたの友達です:)