web-dev-qa-db-fra.com

Comment activer C ++ 11 dans gcc?

J'utilise gcc 4.8.1 à partir de http://hpc.sourceforge.net sur Mac OSX Mountain Lion. J'essaie de compiler un programme C++ qui utilise la fonction to_string dans <string>. Je dois utiliser le drapeau -std=c++11 à chaque fois:

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

Est-il possible d'inclure ce drapeau par défaut?

107
Guddu

H2CO3 a raison, vous pouvez utiliser un fichier makefile avec l'ensemble CXXFLAGS avec -std = c ++ 11 Un fichier makefile est un simple fichier texte contenant des instructions pour compiler votre programme. Créez un nouveau fichier nommé Makefile (avec un M majuscule). Pour compiler automatiquement votre code, tapez simplement la commande make dans un terminal. Vous devrez peut-être installer make.

Voici un simple:

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) $@ -c $<

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

Cela suppose que tous les fichiers .cpp se trouvent dans le même répertoire que le fichier makefile. Mais vous pouvez facilement Tweak votre makefile pour supporter une src, inclure et construire des répertoires.

Edit: J'ai modifié le compilateur c ++ par défaut, ma version de g ++ n'est pas à jour. Avec clang ++, ce makefile fonctionne bien.

85
Silouane Gerin

Comme mentionné précédemment - dans le cas d'un projet, Makefile ou autrement, il s'agit d'un problème de configuration de projet, dans lequel vous devrez probablement également spécifier d'autres indicateurs.

Mais qu’en est-il des programmes uniques, où vous écrivez normalement simplement g++ file.cpp && ./a.out?

Eh bien, j'aimerais beaucoup avoir un #pragma à activer au niveau de la source, ou peut-être une extension par défaut - disons .cxx ou .C11 ou autre, le déclenchera par défaut. Mais à ce jour, cette fonctionnalité n'existe pas.

Mais, comme vous travaillez probablement dans un environnement manuel (par exemple, Shell), vous pouvez simplement avoir un alias en vous .bashrc (ou autre chose):

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

ou, pour les nouveaux G ++ (et quand vous voulez vous sentir "vrai C++ 11")

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

Vous pouvez même alias sur g++ lui-même, si vous détestez autant C++ 03;)

21
Tomasz Gandor

Je pense que vous pourriez le faire en utilisant un fichier de spécifications.

Sous MinGW, vous pouvez exécuter
gcc -dumpspecs> specs

Où il est dit

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

Vous le changez en

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

Et puis placez-le dans
/mingw/lib/gcc/mingw32/<version>/specs

Je suis sûr que vous pourriez faire la même chose sans une construction MinGW. Vous ne savez pas où placer le fichier de spécifications cependant.

Le dossier est probablement/gcc/lib/ou/gcc /.

6
DrowsySaturn