如何在 Eclipse Juno/Kepler/Luna CDT 中启用 C++11?

Posted

技术标签:

【中文标题】如何在 Eclipse Juno/Kepler/Luna CDT 中启用 C++11?【英文标题】:How to enable C++11 in Eclipse Juno/Kepler/Luna CDT? 【发布时间】:2013-07-01 16:17:40 【问题描述】:

编辑:事实证明,这并不是 Eclipse Kepler 特有的。我不得不对 Eclipse Juno 使用相同的过程。问题是在回答同样问题的其他帖子中似乎缺少步骤。

我正在为 C++ 使用 Eclipse Kepler,我正在尝试使用 C++11 并遇到错误。编译时出现错误

错误:C++98 模式下不允许基于范围的 for 循环

我已按照帖子中的说明进行操作

Eclipse CDT C++11/C++0x support

并且为 Eclipse Juno 提供的解决方案不起作用。

不同的 cmets 建议重新启动 eclipse 并清理和重建。这并没有什么不同。

【问题讨论】:

【参考方案1】:

您需要做两件事,首先需要设置编译器,然后需要设置 CDT 的语言处理器。由于您没有提及您使用的编译器,我假设它是 GCC,但其他编译器的步骤将类似。 (请注意,您当然需要支持 C++11 的编译器。)

设置编译器相当简单:

    右键单击您的项目,然后单击属性 在 C/C++ 构建下单击设置 在 GCC C++ 编译器下,单击杂项 在“其他标志”框中,将“-std=c++11”附加到标记列表中。 点击应用和确定

此时,您应该能够重建项目并使其运行。但是 CDT 仍然可能显示 C++11 包含的错误。以下是解决该问题的方法:

    右键单击您的项目,然后单击属性 在 C/C++ 常规下单击“预处理器包含路径、宏” 选择提供者选项卡 列表中应该有一个项目,上面写着“GCC 内置编译器设置”。选择此条目。 取消选中“使用全局提供程序...”选项 在列表下方有一个框,上面写着“获取编译器规范的命令”。在此附加“-std=c++0x”。 使用右侧的“上移”按钮将“GCC 内置编译器设置”提供程序移至列表顶部。 单击应用,然后单击确定。 返回 Eclipse 工作区,选择项目菜单、C/C++ 索引,然后单击“重新解析未解析的包含”。

【讨论】:

谢谢。这行得通。也许我误读了我链接到的另一篇文章,但似乎在那篇文章中没有提到设置编译器。 对我不起作用。我的主要问题是未解决的 c++11 包含。我把 -std=c++11 放在你说的地方,并重建了完整的索引,仍然显示一堆无法识别的 std::cout、std::set 等...... 编辑:我没有找到它应该的第一部分,但我正在通过 make 编译,所以它可能是一个解释。 (虽然我在工作区配置中找到了它并进行了设置)。但是我把它放在compiler spec,还是不行。 std::shared_ptr 和相同的无法识别。虽然它曾经在 Juno 的旧机器上工作。 在我的情况下(gcc),我使用了 -std=c++0x。所以一切正常。谢谢! @MrEricSir 有没有办法为工作区进行此设置,以便当我添加一个新项目时它也会自动应用到它?【参考方案2】:

Eclipse Kepler Service Release 1 中的 C++11 支持(内部版本 ID:20130919-0819)

在最新版本的 Eclipse Kepler SR1 中,您只需添加 -std=c++11

    右键单击您的项目,然后单击属性 导航到 C/C++ General预处理器包括路径、宏等 选择提供者标签 将 -std=c++11 添加到命令以获取编译器规格: 应用更改,索引应该会自动生成。

“获取编译器规格的命令:”-行应如下所示:

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

【讨论】:

使用 GCC 我必须添加 -std=c++0x 您使用哪种 GCC? c++0X 是 C++11 的旧名称(别名) 发现这是第二次设置新的 eclipse CDT - 设置应该更直观。【参考方案3】:

从 CDT 8.3 (available as a Kepler update) 开始,构建设置中有一个新的方言选项:

http://wiki.eclipse.org/CDT/User/NewIn83#Build

【讨论】:

【参考方案4】:

我使用 Eclipse Kepler 并修复它,我这样做了:

1 - 右键单击​​项目 >> 属性 >> C/C++ 构建 :: 设置

2 - 转到 GCC G++ 编译器 >> 杂项 >> 其他标志

 i then added -std=c++11 
 hit apply and ok

这解决了我的问题!

希望对你有帮助!

【讨论】:

这是 Eclipse 平台的最佳答案,版本:4.3.1 - 不知道 Kepler/Juno 是什么! Eclipse Kepler 是 Eclipse 版本 4.3.X【参考方案5】:

在这里运行 eclipse indigo 和 cdt 8.0.2。我遵循了所有指南,但仍然需要手动设置预处理器定义以查找 std::unique_ptr 之类的内容。 包含文件“内存”检查这一点。 在项目属性的“C++ 常规”中的“路径和符号”下的“符号”选项卡上将 __cplusplus 设置为 201103L。

【讨论】:

是的,适用于从旧项目迁移。【参考方案6】:

将方言标志“-std=c++11”添加到项目属性-> C/C++ Build -> Settings -> Tool settings (GCC C++ Compiler -> Dialect) 解决了我在 Eclipse Kepler 中的问题,除了设置如上所述。

【讨论】:

【参考方案7】:

我使用的是 Eclipse Luna,在 C/C++ Build -> Settings 下没有“工具设置”。我DID按照建议将 -std=c++11 添加到“C/C++ General -> Preprocessor Includes -> Providers”下的编译器规范命令行。但这仍然不能满足我的索引器解析 emplace() 的能力。

于是我查看了头文件,发现 emplace 函数依赖于 __cplusplus >= 201103L。所以我只是添加了预处理器符号“__cplusplus”并将其值设为 201103。

有点骇人听闻,但索引器很高兴。 (并且 makefile 定义了我的构建标志,而不是 eclipse 项目)

【讨论】:

【参考方案8】:

MrEricSir 提供的解决方案只有在安装了最新的 Eclipse Oxygen CDT 后才能工作。 Mars CDT 不适用于我。

【讨论】:

以上是关于如何在 Eclipse Juno/Kepler/Luna CDT 中启用 C++11?的主要内容,如果未能解决你的问题,请参考以下文章

如何在eclipse中安装与使用jacoco

如何在eclipse中添加JAR程序包

如何在eclipse中开发android程序

如何在eclipse 中设置自动添加Javadoc注释

如何在eclipse 中设置自动添加Javadoc注释

如何在eclipse上创建一个web项目