如何在Eclipse CDT中启用C++ 11/C++ 0x支持?

Nic*_*ick 208 c++ eclipse eclipse-cdt c++11

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

这是一段C++ 11代码的示例:

auto text = std::unique_ptr<char[]>(new char[len]);
Run Code Online (Sandbox Code Playgroud)

Eclipse编辑器抱怨:

Function 'unique_ptr' could not be resolved
Run Code Online (Sandbox Code Playgroud)

Makefile编译工作正常.如何让Eclipse停止抱怨这些错误?

Car*_*ner 221

我在Eclipse论坛中发现了这篇文章,只是遵循了这些步骤,它对我有用.我在Windows上使用Eclipse Indigo 20110615-0604并使用Cygwin设置.

  • 制作一个新的C++项目
  • 一切的默认选项
  • 创建后,右键单击项目并转到"属性"
  • C/C++ Build - > Settings - > Tool Settings - > GCC C++ Compiler - > Miscellaneous - > Other Flags.Put -std=c++0x(或者最新的编译器版本-std=c++11....而不是GCC C++编译器我也有Cygwin编译器
  • C/C++通用 - >路径和符号 - >符号 - > GNU C++.单击"添加..."并粘贴__GXX_EXPERIMENTAL_CXX0X__(确保将两个下划线附加并添加前缀)到"名称"中,并将"值"留空.
  • 点击Apply,做任何要求你做的事,然后按OK.

现在还在Eclipse FAQ中对此进行了描述:Eclipse FAQ/C++ 11 Features.

Eclipse图像设置

  • 注意:对于寻找Juno答案的任何人来说,这个_不起作用_. (38认同)
  • 自然的后续问题现在变成:我们可以通过将这些特定的C++项目设置保存到一个新的Eclipse项目模板"C++ 11 Project"来优化我们的工作流程吗? (7认同)
  • 这是否删除了虚假的编辑器错误?我对编译没有任何问题,并且可以识别新的std类型,但是我无法摆脱基于for循环和rvalue引用`&&`的范围的编辑器语法错误. (5认同)
  • @EdH不是真的.CDT有自己的c ++解析器.感谢上帝 (3认同)
  • 对于kepler/juno,解决方案可在[此答案]中找到(http://stackoverflow.com/a/13635080/1149664).它发布在下面的Johan Lundberg的回复中,但我也在这里注意到,使得接受的答案更加完整. (3认同)
  • 是的,它有效!但是,请确保在GXX_EXPERIMENTAL_CXX0X之前添加和附加两个下划线 - 我会在此期间接受此 (2认同)
  • 可以编译并成功运行,但显示一些错误:Methord无法解析. (2认同)

Tri*_*tos 148

Eclipse CDT 4.4 Luna和4.5 Mars的说明

首先,在创建项目之前,配置Eclipse语法分析器:

Window- > Preferences- > C/C++- > Build- > Settings- > Discovery- >CDT GCC Build-in Compiler Settings

在标题为Command to get compiler specsappend 的文本框中-std=c++11

现在您可以创建项目,配置取决于您创建的项目类型:

对于创建的项目:文件 - >新建 - >项目 - > C/C++ - > C++项目

右键单击已创建的项目并打开

Properties- > C/C++ Build- > Settings- > Tool Settings- > GCC C++ Compiler- >Dialect

放入-std=c++11标题文本框other dialect flagsISO C++11Language standard下拉列表中选择.

对于CMake项目

生成eclipse项目文件(在项目中)

mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..
Run Code Online (Sandbox Code Playgroud)

然后将生成的目录导入eclipse作为标准的eclipse项目.右键单击项目并打开

Properties- > C/C++ General- > Preprocessor Include Paths, Marcos etc.- >Providers

启用CDT GCC Build-in Compiler Settings并移动它高于Contributed PathEntry Containers(这很重要)

最后的共同步骤

重新编译,重新生成Project- > C/C++ Index并重新启动Eclipse.

  • Luna没有其他答案对我有用.谢谢. (6认同)
  • 很棒,适用于基于CMake的项目 (5认同)
  • 对于带有C ++ Makefile项目的Eclipse Neon.3,向其添加`-std = c ++ 11`的项目设置为`Project Properties-&gt; C / C ++ General-&gt; Preprocessor Include Paths,Macros etc.-&gt; Providers [标签]-&gt; CDT GCC内置编译器设置-&gt;用于获取编译器规格的命令:追加您的-std = c ++ 11。我已经按照建议在全局工作区设置中进行了设置,但是当我创建一个新的`Makefile`项目时,它并没有复制到我上面描述的位置。 (2认同)

Joh*_*erg 112

2016年更新:

gcc 6(更改)开始,默认的C++方言是C++ 14.这意味着除非你明确需要一个比那个更新或更旧的方言,否则你不再需要对eclipse做任何事了.

对于月神和火星

这个社区维基部分包含了Trismegistos的答案;

1.在创建项目之前,配置Eclipse语法分析器:

窗口 - >首选项 - > C/C++ - >构建 - >设置 - >发现 - > CDT GCC内置编译器设置

在标题为命令以获取编译器规格追加的文本框中-std=c++14 2.创建项目,配置取决于您创建的项目类型:

对于创建的项目:文件 - >新建 - >项目 - > C/C++ - > C++项目

右键单击已创建的项目并打开

属性 - > C/C++构建 - >设置 - >工具设置 - > GCC C++编译器 - >方言

放入-std=c++14标题为其他方言标志的文本框或从语言标准下拉列表中选择ISO C++ 11.

现在有一种新方法可以在没有GXX_EXPERIMENTAL黑客的情况下解决这个问题.

对于最新版本 :(目前Juno和Kepler Luna):

在较新版本的Juno下,设置位于Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ().

旧版本2012/2013:

  1. 在C/C++ Build下(在项目设置下),找到Preprocessor Include Path并转到Providers选项卡.取消选择除CDT GCC内置编译器设置之外的所有内容.然后取消标记共享设置条目.... 将选项-std = c ++ 11添加到名为Command的文本框中以获取编译器规范.

  2. 转到路径和符号.在"符号"下,单击" 恢复默认值",然后单击" 应用".


笔记:

Eclipse对于应用程序非常挑剔,每次离开设置选项卡时都需要执行此操作.

[自我推销]:我根据上述内容编写了自己更详细的说明. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

感谢用户Nobody访问/sf/answers/954455631/

  • 谢谢,但它没有帮助我解决c ++ 11引用.程序编译正确,但eclipse无法解决它们.当我检查"数组"时,`#ifnf __GXX_EXPERIMENTAL_CXX0X__`返回true,并且不解析它下面的代码.当我将`__GXX_EXPERIMENTAL_CXX0X__`添加到项目符号时,数组得到解析,但我的项目引用被搞砸了.这可能是什么问题? (3认同)

And*_*eas 20

对于最新的(Juno)eclipse cdt,以下工作对我来说,不需要__GXX_EXPERIMENTAL_CXX0X__对自己声明.这适用于CDT索引器和编译器的参数:

"您的项目名称" - >右键单击 - >属性:

C/C++ General - >预处理器包括路径,宏等 - >切换到名为"Providers"的选项卡:

  • 对于"配置"选择"发布"(以及之后的"调试")

  • 关闭所有提供程序,只需选择"CDT GCC内置编译器设置"

  • 取消选中"在项目之间共享设置条目(全局提供商)"

  • 在"获取编译器规范的命令:"中添加"-std = c ++ 11",不带引号(也可以使用引号)

  • 点击应用并关闭选项

  • 重建索引

现在所有与c ++ 11相关的东西都应该由索引器正确解析.

win7 x64,来自sourceforge的mingwbuilds项目的最新官方日食与cdt mingw-w64 gcc 4.7.2

  • 你需要使用新设置编译一次,因此解析器将"学习"std = c ++ 11标志被设置 (2认同)

Jer*_*ome 15

我在Eclipse Juno上遇到了同样的问题.这些步骤解决了这个问题:

  • 去吧Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols].
  • 添加符号:__ cplusplus,其值为201103L

  • 这应该是接受的答案,因为它也适用于Makefile项目! (2认同)

小智 12

对于Eclipse CDT Kepler,对我来说摆脱std::thread未解决的符号是:

  1. 转到首选项 - > C/C++ - >构建 - >设置

  2. 选择"发现"选项卡

  3. 选择CDT GCC内置编译器设置[共享]

  4. 将-std = c ++ 11添加到"获取编译器规范的命令:"字段,例如:

$ {COMMAND} -E -P -v -dD -std = c ++ 11 $ {INPUTS}

  1. Ok和重建项目的索引.

添加-std=c++11到项目Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Flags对于Kepler来说还不够,但对于像Helios这样的旧版本来说已经足够了.


rav*_*yla 5

我还不能发表评论,所以我正在写自己的答案:

它与__GXX_EXPERIMENTAL_CXX0X__Eclipse Juno和CDT 8.x 有关并且它有效.

这个答案的某些部分已经在其他答案中有所涉及,但我希望它是连贯的.

为了能够使用stdc ++ 11进行构建,必须为编译器添加特定的标志.您可以通过项目属性执行此操作.修改项目属性RMBProject propertiesALT + ENTER.然后是C/C++ Build - > Settings - > Tool Settings - > GCC C++ Compiler - > Miscellaneous - > Other Flags.将-std = c ++ 11放在行尾,对于GCC,它看起来像:-c -fmessage-length=0 -std=c++11.通过添加-stdc ++ 11标志编译器(GCC)将__GXX_EXPERIMENTAL_CXX0X__自行声明.

此时,您可以使用C++ 11的所有优点来构建项目.

问题是Eclipse有自己的解析器来检查错误 - 这就是为什么你仍然在Eclipse编辑器中得到所有令人讨厌的错误,同时你可以在没有任何错误的情况下构建和运行项目.有一种方法可以通过__GXX_EXPERIMENTAL_CXX0X__为项目明确声明标志来解决这个问题,可以这样做(就像Carsten Greiner所说的那样):C/C++ General - > Paths and Symbols - > Symbols - > GNU C++.单击"添加..."并过去__GXX_EXPERIMENTAL_CXX0X__(确保将两个下划线附加和前置)到"名称"中,并将"值"留空.现在是我想在第一个答案的评论中提到的额外部分,请转到:C/C++ General - >预处理器包含路径宏等 - >提供者,然后选择CDT Managed Build Setting Entries然后单击APPLY并返回到GNU下的Entries选项卡C++现在应该有CDT托管构建设置条目检查内部是否有定义__GXX_EXPERIMENTAL_CXX0X__- > APPLY和rebuild index你应该在这一点上没事.


归档时间:

查看次数:

219792 次

最近记录:

6 年,5 月 前