如何在gcc中启用C++ 11?

Gud*_*ddu 109 g++ c++11

我在Mac OSX Mountain Lion上使用http://hpc.sourceforge.net上的gcc 4.8.1 .我正在尝试编译一个使用该to_string函数的C++程序<string>.我-std=c++11每次都需要使用旗帜:

g++ -std=c++11 -o testcode1 code1.cpp
Run Code Online (Sandbox Code Playgroud)

有没有办法默认包含这个标志?

Sil*_*rin 85

H2CO3是正确的,您可以使用带有-std = c ++设置的CXXFLAGS的makefile 11 makefile是一个简单的文本文件,其中包含有关如何编译程序的说明.创建一个名为Makefile的新文件(使用大写字母M).要自动编译代码,只需在终端中键入make命令即可.您可能必须安装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) $@ -c $<

clean:
    rm -f *.o
    rm $(BIN)
Run Code Online (Sandbox Code Playgroud)

它假定所有.cpp文件与makefile位于同一目录中.但您可以轻松调整makefile以支持src,包含和构建目录.

编辑:我修改了默认的c ++编译器,我的g ++版本不是最新的.使用clang ++,这个makefile工作正常.

  • 值得注意的是,标准 Makefile 语法需要制表符,否则会出现神秘、愚蠢的错误。这就是为什么我将 gmake 与 RECIPEPREFIX 一起使用,如[文档](http://www.gnu.org/software/make/manual/make.html#Special-Variables)所示。制表符是令人厌恶的;永远不要使用它们。 (2认同)

Tom*_*dor 21

如前所述 - 在项目Makefile或其他情况下,这是项目配置问题,您可能还需要指定其他标志.

但是一次性程序怎么样,你通常会写的g++ file.cpp && ./a.out

好吧,我非常希望有一些#pragma在源级别上交,或者可能是默认扩展名 - .cxx或者说.C11或者其他什么,默认情况下触发它.但截至今天,还没有这样的功能.

但是,由于您可能在手动环境(即shell)中工作,因此您可以在您.bashrc(或其他)中使用别名:

alias g++11="g++ -std=c++0x"
Run Code Online (Sandbox Code Playgroud)

或者,对于较新的G ++(当你想要感受"真正的C++ 11"时)

alias g++11="g++ -std=c++11"
Run Code Online (Sandbox Code Playgroud)

g++如果你非常讨厌C++ 03,你甚至可以使用自己的别名;)


小智 6

我想你可以使用specs文件来做到这一点.

在MinGW下你可以运行
gcc -dumpspecs> specs

在哪里说

*cpp:
%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT}
Run Code Online (Sandbox Code Playgroud)

你改成它

*cpp:
%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT} -std=c++11
Run Code Online (Sandbox Code Playgroud)

然后将其放在
/ mingw/lib/gcc/mingw32/<version>/specs中

我相信没有MinGW版本你也可以做同样的事情.不知道在哪里放置specs文件.

该文件夹可能是/ gcc/lib /或/ gcc /.