【问题标题】:How do I enable C++11 in gcc?如何在 gcc 中启用 C++11?
【发布时间】:2013-05-29 00:07:02
【问题描述】:

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

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

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

【问题讨论】:

  • 使用 Makefile 并将其放入CXXFLAGS
  • 就我个人而言,我已经使用了一个自动化服务来使用这样的标志进行编译。 Makefile 也不错,当然还有 XCode(或任何其他 IDE)。
  • Dev-C++ 和其他 IDE 有编译器选项,您可以在其中设置它

标签: c++11 g++


【解决方案1】:

H2CO3 是对的,您可以使用带有 -std=c++11 设置的 CXXFLAGS 的 makefile 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)

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

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

【讨论】:

  • 感谢 Silouane 和 @H2CO3 :) 我应该学习使用 makefile
  • @guddu :这是一个tutorial,似乎是一个相当完整的介绍。然后你可能想检查the special macros
  • 值得注意的是,标准 Makefile 语法需要制表符,否则会产生神秘的、愚蠢的错误。这就是我使用 gmake 和 RECIPEPREFIX 的原因,如the documentation 所示。制表符是可憎的;永远不要使用它们。
【解决方案2】:

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

但是一次性程序呢,通常只写g++ file.cpp &amp;&amp; ./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++ 本身;)

【讨论】:

    【解决方案3】:

    我认为您可以使用规范文件来做到这一点。

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

    上面写着

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

    你改成

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

    然后放入
    /mingw/lib/gcc/mingw32//specs

    我相信你可以在没有 MinGW 构建的情况下做同样的事情。但不确定将规范文件放在哪里。

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

    【讨论】:

    • 在这个时间点,更容易获得 gcc-6 的构建,其中默认为 C++14。
    • Linux下,运行strace -f gcc your-sources-here 2&gt;&amp;1 | grep specs可以找到位置。在一个(较旧的)Debian 系统上,这会产生/usr/lib/gcc/i586-linux-gnu/4.9/specs。如答案中所述创建specs(需要 sudo 在Linux下将其移动到那里)并且像魅力一样工作!谢谢。
    【解决方案4】:

    如果您使用的是 sublime,那么如果您将它作为构建系统的代码添加到构建中,则此代码可能会起作用。您可以使用this link 了解更多信息。

    {
        "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}\""
            }
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多