2013-06-02 2 views
89

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

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

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

+2

Используйте Makefile и поместите его в 'CXXFLAGS'. –

+0

Лично я отправился с помощью автомата для компиляции с использованием таких флагов. Makefiles также хороши, и тогда, конечно, есть XCode (или любая другая среда IDE). – Dave

+0

У Dev-C++ и других IDE есть параметры компилятора, где вы можете установить его – boctulus

ответ

66

H2CO3 является правильным, вы можете использовать make-файл с CXXFLAGS с -std = C++ 11 Файл make - это простой текстовый файл с инструкциями о том, как скомпилировать вашу программу. Создайте новый файл с именем Makefile (с капиталом M). Чтобы автоматически скомпилировать код, введите команду в терминал. Возможно, вам придется установить 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.

Редактировать: Я модифицировал компилятор C++ по умолчанию, моя версия g ++ не обновлена. С clang ++ этот make-файл работает нормально.

+0

спасибо Silouane и @ H2CO3 :) Я должен научиться работать с make-файлами – Guddu

+1

@guddu: Вот [учебник] (http: //www.cs.umd. edu/class/fall2002/cmsc214/Tutorial/makefile.html), что кажется довольно полным введением. Затем вы можете проверить [специальные макросы] (http://www.cprogramming.com/tutorial/makefiles_continued.html) –

+1

Стоит отметить, что для стандартного синтаксиса Makefile требуются символы табуляции, или он даст критические идиотские ошибки. Именно поэтому я использую gmake с RECIPEPREFIX, как показано в [документации] (http://www.gnu.org/software/make/manual/make.html#Special-Variables). Таб-символы - мерзость; использовать их никогда. –

18

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

Но как насчет одноразовых программ, где вы обычно просто пишите 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, что много;)

+0

Я делаю это. спасибо – Guddu

4

Я думаю, что вы могли бы сделать это с помощью зр файл ecs.

Под MinGW можно запустить
Gcc -dumpspecs> спецификации

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

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

Вы можете изменить его

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

А затем поместить его в
/mingw/lib/gcc/mingw32/< версия >/спецификации

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

Возможно, это папка/gcc/lib/or/gcc /.

+1

На данный момент легче получить сборку gcc-6, где по умолчанию используется C++ 14. –

Смежные вопросы