2013-06-02 11 views
89

Używam gcc 4.8.1 od http://hpc.sourceforge.net na Mac OSX Mountain Lion. Próbuję skompilować program C++, który używa funkcji to_string w <string>. Muszę użyć flagi -std=c++11 za każdym razem:Jak włączyć C++ 11 w gcc?

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

Czy istnieje sposób, aby włączyć tę flagę domyślnie?

+2

Użyj pliku Makefile i umieść go w 'CXXFLAGS'. –

+0

Osobiście poszedłem z usługą automatyzacji do kompilacji przy użyciu takich flag. Pliki Makefile są również dobre, a następnie oczywiście istnieje XCode (lub jakikolwiek inny IDE). – Dave

+0

Dev-C++ i inne IDE mają opcje kompilatora, gdzie można je ustawić – boctulus

Odpowiedz

66

H2CO3 ma rację, możesz użyć pliku makefile z zestawem CXXFLAGS z opcją -std = C++ 11 Plik Makefile to prosty plik tekstowy z instrukcjami, jak skompilować program. Utwórz nowy plik o nazwie Makefile (z dużym M). Aby automatycznie skompilować swój kod, wpisz polecenie make w terminalu. Być może będziesz musiał zainstalować make.

Oto prosta:

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) 

Zakłada ona, że ​​wszystkie pliki .cpp są w tym samym katalogu co makefile. Możesz jednak łatwo modyfikować plik Makefile, aby obsługiwał katalogi src, include i build.

Edytuj: Zmieniłem domyślny kompilator C++, moja wersja g ++ nie jest aktualna. Z clang ++ ta makefile działa dobrze.

+0

dzięki Silouane i @ H2CO3 :) powinienem nauczyć się pracować z plikami Makefile – Guddu

+1

@guddu: Oto [samouczek] (http: //www.cs.umd. edu/class/fall2002/cmsc214/Tutorial/makefile.html), który wydaje się raczej kompletnym wprowadzeniem. Następnie możesz sprawdzić [specjalne makra] (http://www.cprogramming.com/tutorial/makefiles_continued.html). –

+1

Warto zauważyć, że standardowa składnia Makefile wymaga znaków tabulacji, lub da tajemnicze, idiotyczne błędy. Dlatego używam gmake z RECIPEPREFIX, jak pokazano w [dokumentacji] (http://www.gnu.org/software/make/manual/make.html#Special- Variables). Postacie tabulatorów są obrzydliwością; używaj ich nigdy. –

18

Jak wcześniej wspomniano - w przypadku projektu, Makefile lub w inny sposób, jest to problem konfiguracji projektu, w którym prawdopodobnie będziesz musiał również określić inne flagi.

Ale co z jednorazowymi programami, w których zwykle wystarczy napisać g++ file.cpp && ./a.out?

Cóż, chciałbym bardzo lubią mieć jakiś #pragma obrócić w sprawie na poziomie źródłowym, a może domyślnego rozszerzenia - mówią .cxx lub .C11 lub cokolwiek, wyzwolić go domyślnie. Ale na dzień dzisiejszy nie ma takiej cechy.

Ale, jak zapewne pracuje w ręcznym środowiska (tj shell), można po prostu mieć alias w was .bashrc (lub cokolwiek):

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

lub dla nowszej G ++ (i kiedy chcesz poczuć "prawdziwy C++ 11")

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

można nawet alias do samego g++, jeśli nienawidzisz C++ 03, że dużo;)

+0

robię to. dzięki – Guddu

4

Myślę, że można to zrobić przy użyciu sp plik ecs.

Pod MinGW można uruchomić
gcc -dumpspecs> specyfikacje

gdzie jest napisane

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

go zmienić na

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

a następnie umieścić go w
/mingw/lib/gcc/mingw32/<wersja>/specs

Jestem pewien, że możesz zrobić to samo bez kompilacji MinGW. Nie wiem, gdzie umieścić plik specyfikacji.

Prawdopodobnie folder to/gcc/lib/lub/gcc /.

+1

W tym momencie łatwiej jest uzyskać kompilację z gcc-6, gdzie domyślnie jest to C++ 14. –