Как включить С++ 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/.