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?
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.
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;)
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 /.