铿锵++;默认参数或配置文件 我想在C++ 14中开发,并使该标准成为编译器的默认值(主要是G+和CLAN+++)。

铿锵++;默认参数或配置文件 我想在C++ 14中开发,并使该标准成为编译器的默认值(主要是G+和CLAN+++)。,c++,g++,clang++,C++,G++,Clang++,这样做的好处是避免了弄乱EclipseCDT的内部配置,用于解析、编译等 对于gcc编译器,我设法提供了一个“specs”文件,最后,C++14代码编译如下: $g++testcpp14.cpp 然而,我并没有在clang(++)中找到类似的东西。这就像默认情况下为编译器或配置提供一些命令行参数一样 是否有任何用于clang/clang++的配置文件?或者对于编译器使用的C++语言(如CLAN++是一个驱动程序)。 多谢各位 编辑:我尽量避免使用shell,即提供稍后将编译委托给trye编译器的

这样做的好处是避免了弄乱EclipseCDT的内部配置,用于解析、编译等

对于gcc编译器,我设法提供了一个“specs”文件,最后,C++14代码编译如下:

$g++testcpp14.cpp

然而,我并没有在clang(++)中找到类似的东西。这就像默认情况下为编译器或配置提供一些命令行参数一样

是否有任何用于clang/clang++的配置文件?或者对于编译器使用的C++语言(如CLAN++是一个驱动程序)。 多谢各位


编辑:我尽量避免使用shell,即提供稍后将编译委托给trye编译器的脚本。原因:您必须提供很多脚本(g++、gcc、clang、clang++等),但这仍然不能阻止IDE直接调用/usr/bin/g++,绕过脚本提供的路径。只有替换二进制文件/usr/bin/g++(或clang++),您才能实现某些功能,但在升级.deb gcc包时,这是无法维护的。

从clang 6开始,它支持。文件中提供的命令行选项位于命令行上其余选项的前面。文件名可以在命令行中提供,也可以用用于调用编译器的命令名进行编码


问题中的示例用例是不必要的,因为CLAN 6中引入的另一个改变是使默认C++语言为C++ 14(更确切地说,GNU+++ 14)。< / P>我不确定我会更改<代码> G++< /COD>编译模式的缺省值,这似乎是一个很好的方法,可以破坏或更改您可能下载的任何内容的编译(请记住,C++14和C++11引入了不兼容和语义差异,即您可能有有效的C++98代码未编译,或者更糟的是,在C++11或C++14模式下编译时,“静默”显示出不同的行为)。明确说明所需的编译器标志更安全。@MatteoItalia:谢谢,我很清楚这一点。要么更新代码,要么为代码提供相应的std=gnu++98标志。我唯一要问的是,默认情况下,编译器可以按我所希望的方式工作(C++14)。实际上并不多,只是更改了默认设置。此外,这将真正激励我将代码更新为C++14…问题不在于你的代码,而在于你可能下载并必须编译的其他任何东西-例如,我碰巧在上个月编译了gcc、MinGW、Qt、wine、ffmpeg和其他“复杂”包,我可以向您保证,通过他们的构建系统(特别是如果他们同时具有C++98和C++11位),在正确的位置插入编译开关是很难的。一般来说,最好避免弄乱全局系统工具的默认设置,因为脚本等经常会对其环境做出一些不成文的假设,所以越少偏离默认设置越好。@MatteoItalia:是的。但这就像我提供包含c++14的CXXFLAGS一样。如果真的需要,我会覆盖它。我期待着下一步,我不喜欢默认设置让我留在旧世界。考虑到这一点,我会坚持使用Windows(95?),因为这是我笔记本电脑上的默认设置。我的一位同事总是有一个混乱的环境(奇怪的符号链接、默认设置、不断变化的环境变量、肮脏的沙盒等等),他是一个在构建几乎任何非平凡项目时都会经历各种痛苦的人(内部和外部);调试这类问题只是受挫和浪费时间,通常不会带来有用知识的净收益。我建议您避免使用这类东西,因为根据我的经验,潜在的痛苦大于可疑的收益。当然,这只是一个建议,随您的意想去做。我可以在配置文件中添加环境变量吗?例如

-I$HOME/include
我不这么认为,@Liu.Clang肯定会将其理解为字面意义上的
$HOME
。谢谢。我读了你提到的网站。如果不是我自己编译Clang,我怎么知道
Clang\u CONFIG\u FILE\u USER\u DIR
是什么呢?听起来是一个关于堆栈溢出的好问题,@Liu.如果我想知道我可以自己运行
strace-f clang--config debug.cfg
。输出应该包括一些
stat
open
调用,这些调用提到了在试图打开文件时它所查看位置的完整路径。谢谢。让我直接问一下股票溢出。