Как включить С++ 11 в gcc?

Я использую gcc 4.8.1 из http://hpc.sourceforge.net на Mac OSX Mountain Lion. Я пытаюсь скомпилировать программу на С++, которая использует функцию to_string в <string>. Мне нужно использовать флаг -std=c++11 каждый раз:

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

Есть ли способ включить этот флаг по умолчанию?

Ответ 1

H2CO3 прав, вы можете использовать make файл с набором CXXFLAGS с -std = С++ 11 Makefile - это простой текстовый файл с инструкциями о том, как скомпилировать вашу программу. Создайте новый файл с именем 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) [email protected] -c $<

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

Предполагается, что все .cpp файлы находятся в том же каталоге, что и файл makefile. Но вы можете легко настроить свой файл makefile для поддержки каталогов src, include и build.

Изменить: я изменил компилятор С++ по умолчанию, моя версия g++ не обновлена. С clang++ этот make файл работает нормально.

Ответ 2

Как упоминалось ранее - в случае проекта Makefile или иначе это проблема с конфигурацией проекта, где вам также нужно будет указать и другие флаги.

Но как насчет одноразовых программ, где вы обычно просто пишете g++ file.cpp && ./a.out?

Хорошо, мне бы хотелось, чтобы некоторые #pragma включались на уровне источника или, возможно, по умолчанию - скажем .cxx или .C11 или что-то еще, запускайте его по умолчанию. Но на сегодняшний день такой функции нет.

Но, поскольку вы, вероятно, работаете в ручной среде (то есть оболочке), вы можете просто иметь псевдоним в .bashrc (или что-то еще):

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

или, для более нового g++ (и когда вы хотите почувствовать "реальный С++ 11" )

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

Вы даже можете использовать псевдоним g++, если вы очень сильно ненавидите С++ 03;)

Ответ 3

Я думаю, вы могли бы сделать это, используя файл спецификаций.

В MinGW вы можете запустить
gcc -dumpspecs > спецификации

Где он говорит

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

Вы меняете его на

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

И затем поместите его в
/MinGW/Library/GCC/mingw 32/< версия > /функции

Я уверен, что вы можете сделать то же самое без сборки MinGW. Не уверен, где разместить файл спецификаций.

Папка, вероятно, либо/gcc/lib/или/gcc/.