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

编辑:事实certificate,这并不是特定于Eclipse开普勒。 我必须为Eclipse Juno使用相同的过程。 问题是,在回答这个问题的其他职位似乎有缺失的步骤。

我正在使用Eclipse Kepler for C ++,我试图使用C ++ 11,并得到错误。 当我编译我得到的错误

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

我按照post的指示

Eclipse CDT C ++ 11 / C ++ 0x支持

Eclipse Juno提供的解决scheme不起作用。

不同的意见build议重新启动日食和清理和重build。 这没有什么区别。

有两件事你必须做,首先你需要设置你的编译器,然后你需要设置CDT的语言处理器。 既然你没有提到你正在使用哪个编译器,我会认为它是GCC,但其他编译器的步骤是相似的。 (注意,你需要一个支持C ++ 11的编译器,当然。)

设置编译器非常简单:

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

在这一点上,你应该能够重build你的项目,并让它运行。 但是CDT仍然可能为C ++ 11包含错误。 以下是你如何解决这个问题:

  1. 右键单击您的项目,然后单击属性
  2. 在C / C ++常规下单击“预处理器包含path,macros”
  3. select提供者选项卡
  4. 列表中应该有一个项目,例如“GCC Built in Compiler Settings”。 select这个条目。
  5. 取消选中“Use global provider …”选项
  6. 在列表下面有一个框,上面写着“Command to get compiler specs”。 附加“-std = c ++ 0x”。
  7. 使用右上方的“上移”button,移动列表顶部的“GCC内置编译器设置”提供程序。
  8. 单击应用,然后确定。
  9. 回到Eclipse工作区,select“项目菜单”,C / C ++索引,然后单击“重新parsing未parsing的包含”。

Eclipse Kepler服务版本1(Build ID:20130919-0819)中的C ++ 11支持

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

  1. 右键单击您的项目,然后单击属性
  2. 导航到C / C ++ GeneralPreprocessor Include Paths,Macros等
  3. select提供者选项卡
  4. -std = c ++ 11添加到命令以获取编译器规格:
  5. 应用更改,索引应自动生成。

“获取编译器规范的命令:”- line应该如下所示:

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

从CDT 8.3开始( 作为Kepler更新提供 ),在构build设置中有一个新的方言选项:

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

我使用Eclipse开普勒,并解决它我做到了这一点:

1 – 右键单击​​Project >> Proprietes >> C / C ++ Build :: Settings

2 – 去GCC G ++编译>>其他>>其他标志

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

这解决了我的问题!

我希望它有帮助!

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

添加方言标志“-std = c ++ 11”到项目属性 – > C / C ++编译 – >设置 – >工具设置(GCC C ++编译器 – >方言)解决了我在Eclipse Kepler中的问题,除了上述设置。

我正在使用Eclipse Luna,在C / C ++ Build – > Settings下没有“Tool Settings”。 我build议将-std = c ++ 11添加到“C / C ++常规 – >预处理程序包含 – >提供程序”下的编译器规范命令行中。 但是这仍然不能满足我的索引器解决emplace()的能力。

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

有点hackish,但索引器是快乐的。 (makefiles定义我的构build标志,而不是eclipse项目)

MrEricSir提供的解决scheme只有在安装了最新的Eclipse Oxygen CDT后才能使用。 火星CDT对我来说不起作用。