gccでC ++ 11を有効にするにはどうすればよいですか?


117

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

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

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


3
Makefileを使用してに配置しCXXFLAGSます。

個人的には、このようなフラグを使用してコンパイルするオートマトンサービスを利用しました。Makefileも良いですし、もちろんXCode(または他のIDE)もあります。
Dave

Dev-C ++と他のIDEには、それを設定できるコンパイラオプションがあります
boctulus

回答:


90

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ファイルがmakefileと同じディレクトリにあると想定しています。しかし、src、include、およびbuildディレクトリをサポートするようにmakefileを簡単に調整できます。

編集:デフォルトのc ++コンパイラを変更しました。私のバージョンのg ++​​は最新ではありません。clang ++では、このメイクファイルは正常に機能します。


Silouaneと@ H2CO3に感謝します:)私はメイクファイルでの作業を学ぶ必要があります
Guddu

1
@guddu:これはかなり完全な導入のように見えるチュートリアルです。次に、特別なマクロ
Silouane Gerin

1
標準のMakefile構文にはタブ文字が必要であること、または不可解な馬鹿げたエラーが発生することは注目に値します。これが、ドキュメントに示されいるように RECIPEPREFIXでgmakeを使用する理由です。タブ文字は嫌いです。それらを決して使用しないでください。
パルティアンショット

24

前述のとおり-プロジェクトの場合、Makefileまたはその他の場合、これはプロジェクト構成の問題であり、他のフラグも指定する必要がある可能性があります。

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

まあ、私は非常にいくつか持っていると思います#pragma言う-ソースレベル、または多分デフォルトの拡張子で上にオンにする.cxxか、.C11デフォルトまたは何でも、トリガーを。しかし、現在のところ、そのような機能はありません。

しかし、おそらく手動環境(つまりシェル)で作業しているので、エイリアスを自分.bashrc(または何でも)に含めることができます。

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

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

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

g++C ++ 03がそんなに嫌いなら、自分自身にエイリアスすることもできます;)


7

スペックファイルを使用してそれを行うことができると思います。

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 / <version> / specsに配置します

MinGWビルドがなくても同じことができると思います。specsファイルをどこに置くかわかりません。

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


1
この時点では、デフォルトがC ++ 14であるgcc-6のビルドを取得する方が簡単です。
Marc Glisse、2015

Linuxでは、を実行して場所を見つけることができますstrace -f gcc your-sources-here 2>&1 | grep specs。1つの(古い)Debianシステムでは、これはをもたらし/usr/lib/gcc/i586-linux-gnu/4.9/specsます。specs回答に記載されているように作成し(Linuxでsudoをそこに移動する必要があります)、魅力のように動作します!ありがとう。
エイドリアンW

0

sublimeを使用している場合、ビルドでシステムを構築するためのコードとして追加すると、このコードが機能する可能性があります。詳細については、このリンクを使用できます。

{
    "shell_cmd": "g++ \"${file}\" -std=c++1y -o \"${file_path}/${file_base_name}\"",
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++",

    "variants":
    [
        {
            "name": "Run",
            "shell_cmd": "g++ \"${file}\" -std=c++1y -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\""
        }
    ]
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.