127

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

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

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

4

4 回答 4

97

H2CO3 is right, you can use a makefile with the CXXFLAGS set with -std=c++11 A makefile is a simple text file with instructions about how to compile your program. Create a new file named Makefile (with a capital M). To automatically compile your code just type the make command in a terminal. You may have to install make.

Here's a simple one :

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)

It assumes that all the .cpp files are in the same directory as the makefile. But you can easily tweak your makefile to support a src, include and build directories.

Edit : I modified the default c++ compiler, my version of g++ isn't up-to-date. With clang++ this makefile works fine.

于 2013-06-02T19:57:33.220 回答
26

如前所述 - 对于项目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"

g++如果你非常讨厌 C++03,你甚至可以给它自己起别名;)

于 2014-01-12T22:05:56.630 回答
7

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

在 MinGW 下你可以运行
gcc -dumpspecs > 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/。

于 2015-12-30T17:11:50.373 回答
0

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

{
    "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}\""
        }
    ]
}
于 2020-02-07T17:07:11.490 回答