2013-06-02 16 views
89

Uso gcc 4.8.1 da http://hpc.sourceforge.net su Mac OSX Mountain Lion. Sto cercando di compilare un programma C++ che utilizza la funzione to_string in <string>. Ho bisogno di usare la bandiera -std=c++11 ogni volta:Come abilitare C++ 11 in gcc?

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

C'è un modo per includere questo flag di default?

+2

Utilizzare un Makefile e inserirlo in 'CXXFLAGS'. –

+0

Personalmente sono andato con un servizio di automazione per compilare usando flag come questo. Anche i Makefile sono buoni, e ovviamente c'è XCode (o qualsiasi altro IDE). – Dave

+0

Dev-C++ e altri IDE hanno opzioni del compilatore dove puoi impostarlo – boctulus

risposta

66

H2CO3 ha ragione, è possibile utilizzare un makefile con il set CXXFLAGS con -std = C++ 11 Un makefile è un semplice file di testo con le istruzioni su come compilare il programma. Crea un nuovo file chiamato Makefile (con una M maiuscola). Per compilare automaticamente il codice, digita il comando come in un terminale. Potrebbe essere necessario installare make.

Ecco un semplice:

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) 

Si presuppone che tutti i file cpp si trovano nella stessa directory del makefile. Ma puoi facilmente modificare il tuo makefile per supportare un src, includere e creare directory.

Modifica: Ho modificato il compilatore C++ predefinito, la mia versione di g ++ non è aggiornata. Con clang ++ questo makefile funziona bene.

+0

grazie a Silouane e @ H2CO3 :) dovrei imparare a lavorare con i makefile – Guddu

+1

@guddu: Ecco un [tutorial] (http: //www.cs.umd. edu/class/fall2002/cmsc214/Tutorial/makefile.html) sembra un'introduzione piuttosto completa. Quindi potresti voler controllare [i macro speciali] (http://www.cprogramming.com/tutorial/makefiles_continued.html) –

+1

Vale la pena notare che la sintassi standard del Makefile richiede caratteri di tabulazione, o che darà errori criptici e idioti. Ecco perché utilizzo gmake con RECIPEPREFIX come mostrato in [la documentazione] (http://www.gnu.org/software/make/manual/make.html#Special-Variables). I personaggi di tabulazione sono un abominio; usali mai. –

18

Come accennato in precedenza, in caso di progetto, Makefile o altro, si tratta di un problema di configurazione del progetto, in cui è probabile che sia necessario specificare anche altri flag.

Ma per quanto riguarda i programmi una tantum, in cui normalmente si scrive solo g++ file.cpp && ./a.out?

Beh, mi sarebbe molto simile ad avere un po '#pragma a girare in su a livello sorgente, o forse un estensione di default - dire .cxx o .C11 o qualsiasi altra cosa, far scattare di default. Ma ad oggi, non esiste questa caratteristica.

Ma, come probabilmente si lavora in un ambiente manuale (cioè shell), si può solo avere un alias in voi .bashrc (o qualsiasi altra cosa):

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

o, per più recente G ++ (e quando vuole sentire "reale C++ 11")

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

si può anche alias g++ sé, se odiate C++ 03 più di tanto;)

+0

ho fatto questo. grazie – Guddu

4

penso che si potrebbe fare con una sp file ecs.

Sotto MinGW è possibile eseguire
-dumpspecs gcc> spec

in cui si dice

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

si cambia a

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

e poi riporla in
/mingw/lib/gcc/mingw32/<versione>/spec.

Sono sicuro che si potrebbe fare lo stesso senza un build MinGW. Non so dove posizionare il file delle specifiche però.

La cartella è probabilmente/gcc/lib/o/gcc /.

+1

A questo punto nel tempo, è più facile ottenere una build di gcc-6, in cui l'impostazione predefinita è C++ 14. –

Problemi correlati