【问题标题】:How to enable C++11 in Eclipse Juno/Kepler/Luna CDT?如何在 Eclipse Juno/Kepler/Luna CDT 中启用 C++11?
【发布时间】: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 并清理和重建。这并没有什么不同。

【问题讨论】:

    标签: eclipse eclipse-cdt eclipse-juno eclipse-kepler eclipse-luna


    【解决方案1】:

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

    设置编译器相当简单:

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

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

    1. 右键单击您的项目,然后单击属性
    2. 在 C/C++ 常规下单击“预处理器包含路径、宏”
    3. 选择提供者选项卡
    4. 列表中应该有一个项目,上面写着“GCC 内置编译器设置”。选择此条目。
    5. 取消选中“使用全局提供程序...”选项
    6. 在列表下方有一个框,上面写着“获取编译器规范的命令”。在此附加“-std=c++0x”。
    7. 使用右侧的“上移”按钮将“GCC 内置编译器设置”提供程序移至列表顶部。
    8. 单击应用,然后单击确定。
    9. 返回 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

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

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

    ${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 不适用于我。

          【讨论】:

            猜你喜欢
            • 2012-11-18
            • 1970-01-01
            • 1970-01-01
            • 2015-07-15
            • 2014-10-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多