Macターミナル内でC++ 11ソースコードをコンパイルしたかったのですが、失敗しました。 g++ -std=c++11
、g++ -std=c++0x
、g++ -std=gnu++11
、およびg++ -std=gnu++0x
を試しましたが、何も機能しませんでした。端末は常にunrecognized command line option
を読み取ります。ただし、g++ -std=gnu
およびそのようなものは正常に機能しました(もちろんC++ 11ソースコードは渡せませんでした)。
C++ 11サポートを有効にするには、どのオプションを使用する必要がありますか?
ちなみに、使用しているコマンドラインツールはXcode内にインストールされており、最新のものであると確信しています。
他の人が指摘したように、clang++
ではなくg++
を使用する必要があります。また、デフォルトのlibstdc ++の代わりにlibc ++ライブラリを使用する必要があります。含まれているlibstdc ++のバージョンはかなり古いため、C++ 11ライブラリ機能は含まれていません。
clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
Xcodeのコマンドラインツールをインストールしていない場合は、xcrun
ツールを使用して、コンパイラやその他のツールを実行せずに実行できます。
xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
また、無効にする特定の警告がある場合は、追加のフラグをコンパイラに渡して無効にすることができます。警告メッセージの最後に、警告を有効にする最も具体的なフラグが表示されます。その警告を無効にするには、警告名の前にno-
を追加します。
たとえば、おそらくc ++ 98互換性の警告は必要ありません。それらの警告の最後にフラグ-Wc++98-compat
が表示され、それらを無効にするには-Wno-c++98-compat
を渡します。
XCodeは、コンパイル時にclang
およびclang++
を使用しますが、g++
ではありません(カスタマイズしていない場合)。代わりに、試してください:
$ cat t.cpp
#include <iostream>
int main()
{
int* p = nullptr;
std::cout << p << std::endl;
}
$ clang++ -std=c++11 -stdlib=libc++ t.cpp
$ ./a.out
0x0
-stdlib=libc++
を除外したことを指摘してくれたbames53の回答に感謝します。
いくつかのGNU拡張機能(およびC++ 11も使用)を使用する場合は、-std=gnu++11
の代わりに-std=c++11
を使用できます。これにより、C++ 11モードが有効になり、 GNU拡張機能も有効のままにしてください。