我在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
有没有一种方法可以默认包含此标志?
我在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
有没有一种方法可以默认包含此标志?
Answers:
H2CO3是正确的,您可以使用将CXXFLAGS设置为-std = c ++ 11的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,include和build目录。
编辑:我修改了默认的c ++编译器,我的g ++版本不是最新的。使用clang ++,此makefile可以正常工作。
如前所述-在项目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,那么您甚至可以自己别名:)
我认为您可以使用specs文件来做到这一点。
在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 /。
strace -f gcc your-sources-here 2>&1 | grep specs
。在一个(较旧的)Debian系统上,这产生了/usr/lib/gcc/i586-linux-gnu/4.9/specs
。specs
按照答案中的描述进行创建(需要sudo才能在Linux下将其移动到那里),并且像一个魅力一样起作用!谢谢。
如果您正在使用sublime,那么如果将其作为构建系统的代码添加到build中,则此代码可能会起作用。您可以使用此链接获取更多信息。
{
"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}\""
}
]
}
CXXFLAGS
。