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

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

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

是否有默认包含此标志的方法?

337721 次浏览

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

它假设。Cpp 文件与 makefile 在同一目录中。但是您可以轻松地调整您的 makefile 以支持 src、 include 和 build 目录。

编辑 : 我修改了默认的 c + + 编译器,我的 g + + 版本不是最新的。

正如前面提到的-对于项目,Makefile或其他,这是一个项目配置问题,您可能还需要指定其他标志。

但是如果是一次性的程序,通常只编写 g++ file.cpp && ./a.out呢?

好吧,我想有一些 #pragma打开在源代码级,或者可能是一个默认的扩展-说 .cxx.C11或其他,触发默认情况下。但是到目前为止,还没有这样的特征。

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

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

或者,对于较新的 G + + (当你想感觉“真正的 C + + 11”)

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

如果你那么讨厌 C + + 03,你甚至可以使用 g++本身的别名;)

我觉得你可以用一个规格文件。

在 MinGW 的领导下,你可以逃跑
Gcc-dump-specs > specs

上面说什么

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

你把它改成

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

然后放进去
/mingw/lib/gcc/mingw32/< version >/specs

我确信你可以在没有 MinGW 版本的情况下做同样的事情,但是不确定在哪里放置规格文件。

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

如果你正在使用升华,那么这个代码可能工作,如果你添加它在建设作为建设系统的代码。您可以使用 这个链接获得更多信息。

{
"shell_cmd": "g++ \"${file}\" -std=c++1y -o \"${file_path}/${file_base_name}\"",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c, source.c++",


"variants":
[
{
"name": "Run",
"shell_cmd": "g++ \"${file}\" -std=c++1y -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\""
}
]
}