为了在C++11标准中编译程序,我们需要做:
g++ -std=c++11 myProgram.cpp -o myProgramExec
字符串但是有没有可能我可以将g的默认标准设置为C11,这样我就不必一次又一次地提到这个选项了。
alias g++='g++ -std=c++11';
型但是我想知道是否有比这更好的方法。有没有g++的配置文件可以编辑以实现这一点?或者有没有更简单的方法来做到这一点?
8ftvxx2r1#
经过一番研究(您可能已经做过了),我还没有找到一种方法来改变g++的默认行为,除了重建一个自定义版本或给它加别名。
g++
为什么这可能是一件好事:
每个版本的g++都有一个定义良好的默认行为,这一点很重要。请考虑:如果您更改g++的默认行为,并试图编译一个作者不知道您的配置的C++项目,该项目可能无法编译或编译时出现细微的错误/意外行为。在您自己的项目中,您可以轻松地将所有相关的标志和选项添加到您的Makefile或CMakeLists.txt中,这样您就不需要再次输入它们。这也将确保编译您的项目的其他人无论其配置如何,都将收到正确的选项。
Makefile
CMakeLists.txt
2lpgd9682#
我知道这篇文章是旧的,但我想回答,因为它不断出现,而我试图这样做。可以通过修改g++ spec文件来更改默认标准。通过运行以下命令查找等级库文件位置列表
strace g++ 2>&1 | grep specs
字符串这将给予gcc将查找的文件路径列表。选择一个路径并在该位置创建一个名为spec的文件检查其运行情况
spec
g++ -v
型结果的第一行将显示Reading specs from <path to specs file>下次运行
Reading specs from <path to specs file>
g++ -dumpspecs > spec
型这将坑默认的spec文件到您的自定义一个最后一步是打开specs文件并找到行*cc1plus:转到下面的行并添加%{!std*:-std=<desired default standard>}保存文件,这应该工作现在,当您在不指定标准的情况下进行编译时,您放在spec文件中的标准将是所使用的ine更多关于spec文件:https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
*cc1plus:
%{!std*:-std=<desired default standard>}
2条答案
按热度按时间8ftvxx2r1#
经过一番研究(您可能已经做过了),我还没有找到一种方法来改变
g++
的默认行为,除了重建一个自定义版本或给它加别名。为什么这可能是一件好事:
每个版本的
g++
都有一个定义良好的默认行为,这一点很重要。请考虑:如果您更改g++
的默认行为,并试图编译一个作者不知道您的配置的C++项目,该项目可能无法编译或编译时出现细微的错误/意外行为。在您自己的项目中,您可以轻松地将所有相关的标志和选项添加到您的
Makefile
或CMakeLists.txt
中,这样您就不需要再次输入它们。这也将确保编译您的项目的其他人无论其配置如何,都将收到正确的选项。2lpgd9682#
我知道这篇文章是旧的,但我想回答,因为它不断出现,而我试图这样做。
可以通过修改g++ spec文件来更改默认标准。
通过运行以下命令查找等级库文件位置列表
字符串
这将给予gcc将查找的文件路径列表。选择一个路径并在该位置创建一个名为
spec
的文件检查其运行情况
型
结果的第一行将显示
Reading specs from <path to specs file>
下次运行
型
这将坑默认的spec文件到您的自定义一个
最后一步是打开specs文件并找到行
*cc1plus:
转到下面的行并添加%{!std*:-std=<desired default standard>}
保存文件,这应该工作
现在,当您在不指定标准的情况下进行编译时,您放在spec文件中的标准将是所使用的ine
更多关于spec文件:https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html