我在 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
有没有办法默认包含这个标志?
我在 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
有没有办法默认包含这个标志?
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.
如前所述 - 对于项目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,你甚至可以给它自己起别名;)
我认为您可以使用规范文件来做到这一点。
在 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/。
如果您使用的是 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}\""
}
]
}