更改g++中的默认C++标准

14
为了在C++11标准下编译程序,我们需要执行以下操作:
 g++ -std=c++11 myProgram.cpp -o myProgramExec

我能否将g++的默认标准设置为C++11,这样我就不必一遍又一遍地提及这个选项。虽然我也可以在我的.bashrc中添加别名:

但是,我是否可以将g++的默认标准设置为C++11,这样我就不必一遍又一遍地提及这个选项。虽然我也可以在我的.bashrc中添加别名:

alias g++='g++ -std=c++11';

但是我想知道是否有比这更好的方法。是否有可以编辑的g ++配置文件以实现此目的?或者是否有更简单的方法来做到这一点?


3
g++6.0开始,默认使用标准为-std=c++14的编译器。 - Pixelchemist
2个回答

9

经过一番调查研究(也许你已经自己做了),我没有找到除了重新构建一个自定义版本或者给它取别名之外改变g++默认行为的方法。


为什么这可能是件好事:

每个g++版本都有一个单一、明确定义的默认行为是很重要的。考虑这个问题:如果你改变了g++的默认行为,并尝试编译一个C++项目,而该项目的作者并不知道你的配置,则该项目可能无法编译或以微妙的错误/意外行为进行编译。

在你自己的项目中,可以轻松地将所有相关标记和选项添加到你的MakefileCMakeLists.txt中,这样你就不需要再次输入它们。这也将确保编译你的项目的其他人无论他们的配置如何,都会收到正确的选项。


2
这并没有回答问题。 - jbapple
2
@jbapple 编辑后的最佳答案(有点令人失望)。 - merlinND

1
我知道这篇帖子很旧,但我想回复一下,因为在我尝试做这个的时候它一直出现。
通过修改g++ spec文件,可以更改默认标准。
运行以下命令找到spec文件的位置列表:
strace g++ 2>&1 | grep specs

这将为您提供gcc将查找的文件路径列表。 选择一个并在该位置创建一个名为spec的文件。
要检查它是否工作,请运行。
g++ -v

第一行的结果将会说 从<规格文件路径>读取规格

接下来运行

g++ -dumpspecs > spec

这将把默认的规范文件放入您的自定义文件中。
最后一步是打开规范文件并找到行*cc1plus: 转到下一行并添加%{!std*:-std=<desired default standard>} 保存文件,应该就可以了。
现在,当您编译时没有指定标准,规范文件中的标准将被使用。
有关规范文件的更多信息:https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接