web-dev-qa-db-ja.com

gccでC ++ 11を有効にする方法

Mac OSX Mountain Lionでは http://hpc.sourceforge.net からgcc 4.8.1を使用しています。 to_string内の<string>関数を使用するC++プログラムをコンパイルしようとしています。毎回フラグ-std=c++11を使う必要があります。

g++ -std=c++11 -o testcode1 code1.cpp

デフォルトでこのフラグを含める方法はありますか?

103
Guddu

H2CO3が正しいので、CXXFLAGSを-std = c ++ 11に設定してメイクファイルを使用することができます。メイクファイルは、プログラムのコンパイル方法を説明した単純なテキストファイルです。 Makefileという名前の新しいファイルを作成します(大文字のM)。コードを自動的にコンパイルするには、端末でmakeコマンドを入力するだけです。 makeをインストールする必要があるかもしれません。

これは簡単なものです:

CXX=clang++
CXXFLAGS=-g -std=c++11 -Wall -pedantic
BIN=prog

SRC=$(wildcard *.cpp)
OBJ=$(SRC:%.cpp=%.o)

all: $(OBJ)
    $(CXX) -o $(BIN) $^

%.o: %.c
    $(CXX) $@ -c $<

clean:
    rm -f *.o
    rm $(BIN)

すべての.cppファイルがメイクファイルと同じディレクトリにあると仮定します。しかし、src、include、buildディレクトリをサポートするようにmakefileを簡単に微調整できます。

編集:私はデフォルトのc ++コンパイラを修正しました、私のバージョンのg ++​​は最新ではありません。 clang ++では、このmakefileはうまく機能します。

82
Silouane Gerin

既に述べたように - プロジェクトの場合、Makefileであれ、そうでなければ、これはプロジェクト設定の問題で、他のフラグも指定する必要があるかもしれません。

しかし、通常はg++ file.cpp && ./a.outを書くだけの、1回限りのプログラムについてはどうでしょうか。

そうですね、ソースレベルで有効にする#pragma、またはデフォルトの拡張機能が欲しいのですが、.cxx.C11など、デフォルトでそれをトリガーすると言います。しかし、今日の時点では、そのような機能はありません。

しかし、あなたはおそらく手動環境(すなわちShell)で作業しているので、あなたはあなたの中にエイリアスを持っていることができます.bashrc(あるいは何でも):

alias g++11="g++ -std=c++0x"

または、より新しいG ++の場合(および「本物のC++ 11」を感じたい場合)

alias g++11="g++ -std=c++11"

C++ 03がそれほど嫌いなら、g++そのものにエイリアスすることさえできます。

21
Tomasz Gandor

Specsファイルを使ってそれができると思います。

MinGWの下であなたは走ることができます
gcc -dumpspecs> specs

それが言うところ

*cpp:
%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT}

あなたはそれをに変更します

*cpp:
%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT} -std=c++11

そしてそれを
/mingw/lib/gcc/mingw32/<バージョン>/specs

MinGWをビルドしなくても同じことができると確信しています。ただし、スペックファイルをどこに配置するのかわからない。

フォルダはおそらく/ gcc/lib /または/ gcc /のいずれかです。

6
DrowsySaturn