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

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

这是一个C ++ 11代码的例子:

auto text = std::unique_ptr<char[]>(new char[len]); 

Eclipse编辑器抱怨:

 Function 'unique_ptr' could not be resolved 

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

我在Eclipse论坛发现了这篇文章,只是遵循这些步骤,它适用于我。 我使用Cygwin安装程序在Windows上使用Eclipse Indigo 20110615-0604。

  • 做一个新的C ++项目
  • 一切的默认选项
  • 一旦创build,右键单击该项目,然后转到“属性”
  • C / C ++编译 – >设置 – >工具设置 – > GCC C ++编译器 – >杂项 – >其他标志。 把-std=c++0x (或者更新的编译器版本-std=c++11放在最后…而不是GCC C ++编译器我也有Cygwin编译器
  • C / C ++常规 – >path和符号 – >符号 – > GNU C ++。 点击“添加…”并粘贴__GXX_EXPERIMENTAL_CXX0X__ (确保附加和前置两个下划线)到“名称”,并保留“值”为空。
  • 点击应用,做任何事要求你做,然后点击确定。

现在在Eclipse常见问题解答中也有对此的描述: Eclipse FAQ / C ++ 11function 。

Eclipse图像设置

Eclipse CDT 4.4 Luna和4.5 Mars的教学

首先,在创build项目之前,configurationEclipse语法分析器:

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

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

现在你可以创build项目了,configuration取决于你创build的项目types:

对于创build的项目为:文件 – >新build – >项目 – > C / C ++ – > C ++项目

右键单击创build的项目并打开

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

-std=c++11放入标题为other dialect flags文本框中,或者从Language standard下拉列表中selectISO C++11

对于CMake项目

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

 mkdir build cd build cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug .. 

然后将生成的目录导入到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。

2016年更新:

从gcc 6 ( 更改 )中,默认的C ++方言是C ++ 14。 这意味着,除非你明确地需要一个比以前更新或更老的方言,否则你不需要对eclipse进行任何操作。

对于月神和火星

这个社区wiki部分包含Trismegistos的答案;

1.在创build项目之前,configurationEclipse语法分析器:

窗口 – >首选项 – > C / C ++ – >生成 – >设置 – >发现 – > CDT GCC内build编译器设置

在标题为Command to get compiler specs的文本框中添加-std=c++14 2.创build项目,configuration取决于您创build的项目types:

对于创build的项目为:文件 – >新build – >项目 – > C / C ++ – > C ++项目

右键单击创build的项目并打开

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

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

现在有一个新的方法可以解决这个问题,而不需要GXX_EXPERIMENTAL。

对于最新版本 :(目前朱诺和开 普勒卢娜 ):

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

旧版本2012/2013:

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

  2. 去path和符号。 在符号下,单击还原默认值 ,然后应用。


笔记:

Eclipse对于应用程序是挑剔的,你需要每次离开设置选项卡。

[自我推销]:我基于上面写了我自己更详细的说明。 http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

感谢用户Nobodyhttps://stackoverflow.com/a/13635080/1149664

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

“你的项目名称” – >右键单击 – >属性:

C / C ++常规 – >预处理器包含path,macros等 – >切换到名为“Providers”的标签:

  • 对于“configuration”select“释放”(和之后的“debugging”)

  • closures所有提供商,并select“CDT GCC内置编译器设置”

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

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

  • 点击应用并closures选项

  • 重build索引

现在所有的C ++ 11相关的东西都应该由索引器正确parsing。

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

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

  • 转到Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
  • 添加符号: __cplusplus ,值为201103L

对于Eclipse CDT开普勒什么工作,我摆脱std ::线程未解决的符号是:

  1. 转到首选项 – > C / C ++ – >生成 – >设置

  2. select发现选项卡

  3. selectCDT GCC内置编译器设置[共享]

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

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

  1. 确定和重build索引的项目。

添加-std = c ++ 11到项目属性/ C / C ++构build – >设置 – >工具设置 – > GCC C ++编译器 – >其他 – >其他标志是不够的开普勒,但它是足够的老版本,如作为Helios。

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

它与__GXX_EXPERIMENTAL_CXX0X__有关,并且对于Eclipse Juno和CDT 8.x是有效的。

这个答案的一些部分已经在其他的答案中涵盖,但我希望它是连贯的。

为了能够使用stdc ++ 11编译,必须为编译器添加特定的标志。 你可以通过项目属性来做到这一点。 修改项目属性RMBProject propertiesALT + ENTER 。 然后C / C ++生成 – >设置 – >工具设置 – > GCC C ++编译器 – >杂项 – >其他标志。 把-std = c ++ 11放在行尾,对于GCC,它看起来像这样: -c -fmessage-length=0 -std=c++11 。 通过添加-stdc ++ 11标志编译器(GCC)将自己声明__GXX_EXPERIMENTAL_CXX0X__

在这一点上,您可以使用C ++ 11的所有优点来构build项目。

问题是Eclipse有它自己的parsing器来检查错误 – 这就是为什么你仍然可以在Eclipse编辑器中得到所有令人讨厌的错误,而同时你可以没有任何构build和运行项目。 有一种方法可以通过为项目显式声明__GXX_EXPERIMENTAL_CXX0X__标志来解决这个问题,就像Carsten Greiner所说的那样:C / C ++ General – > Paths and Symbols – > Symbols – > GNU C ++。 点击“添加…”和过去__GXX_EXPERIMENTAL_CXX0X__ (确保添加并预先设置两个下划线)到“名称”,并保留“值”空白。 现在是我想在第一个答案的评论中涵盖的额外部分,请转到:C / C ++常规 – >预处理程序包括pathmacros等 – >提供程序,并selectCDT Managed Build Setting Entries然后单击应用,然后返回到在GNU C ++下的Entries选项卡,现在应该有CDT Managed Build Setting Entries检查里面是否定义了__GXX_EXPERIMENTAL_CXX0X__如果是 – APPLY和重build索引,你应该在这一点上罚款。

我不知道是否只有我,排名最高的解决scheme不适合我,我的eclipse版本只是普通的eclipse平台使用sudo apt-get在Ubuntu安装eclipse安装但是我find了一个采用方法的解决scheme从排名最高的解决scheme和第二,我做了什么,使其工作描述如下(注意,其他步骤,如创build一个C + +项目等被忽略简单)

一旦你创build了C ++项目

(1)C / C ++常规 – >path和符号 – >符号 – > GNU C ++。 点击“添加…”并粘贴GXX_EXPERIMENTAL_CXX0X (确保添加并预先设置两个下划线)到“名称”中,并将“值”留空。

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

在执行了上述2和2以上的步骤之后,它的工作原理,eclipse能够解决unique_ptr,我不知道这个解决scheme为什么起作用,希望它能帮助人们。

我也有几个问题(Ubuntu 13.04 64位,g ++ – 4.8,eclipse Juno 3.8.1,CDT 6.0.0)。 上面提到了很多东西,不好意思重复这些,但是另外我有问题利用

 std::thread 

作为c ++ 11的一部分(添加链接器的pthread解决了这个问题)。 无论如何,最后这些设置工作正常:

Project – > Properties – > C / C ++ Build – > Settings – > Miscellaneous。 添加

 -std=c++11 

GCC和G ++编译器的标志。 点击应用。

对于链接器,相同的窗口,杂项,链接器标志,添加了

 -pthread 

旗。 共享库设置,共享对象名称,添加

 -Wl,--no-as-needed 

旗也是。 点击应用。

C / C ++常规 – >path和符号 – >符号TAB,GNU C ++选中,添加

 __GXX_EXPERIMENTAL_CXX0X__ 

(没有价值)

旗。 点击应用。

C / C ++ General – > Preprocessor Include paths .. – > Providers tab:check

CDT GCC内置的编译器设置

和“命令获取编译器规格”,添加

 -std=c++11 

旗。 取消选中共享。 点击应用。

CDTpipe理build立设置条目,也检查这一点。 取消其他两个。 点击应用。

回到“条目”选项卡,GNU C ++ CDT Managages生成设置条目,您现在应该看到您添加的条目

 __GXX_EXPERIMENTAL_CXX0X__ 

条目。

而已。 编码时,input

 std:: 

现在可以自动完成线程类,生成应该工作正常,应该没有

 std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted 

在运行时。

  • 右键单击该项目并转到“属性”
  • C / C ++构build – >设置 – >工具设置 – > GCC C ++编译器 – >杂项 – >其他标志。 把-lm放在其他标志文本框的末尾并确定。

靛蓝也没有清洁版本的工作。 黑客被忽略,并且缺less所需的configuration选项。 没有明显的原因,build设开始工作后,不工作,没有提供任何有用的理由。 至less从命令行,我得到可重复的结果。

要在Eclipse Luna中获得对C ++ 14的支持,可以执行以下步骤:

  • C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings ,添加“-std = c ++ 14”
  • C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous ,添加“-std = c ++ 14”

重新编译您的项目并最终重新启动Eclipse。 它应该按预期工作。

即使您已将C ++ 11内存标头包含在文件中,Eclipse C / C ++也无法识别标志std::unique_ptr

假设你正在使用GNU C ++编译器,这是我所做的修复:

Project – > Properties – > C / C ++ General – > Preprocessor Include Paths – > GNU C ++ – > CDT User Setting Entries

  1. 点击“添加…”button

  2. 从下拉菜单中select“预处理器macros”

     Name: __cplusplus Value: 201103L 
  3. 点击应用,然后确定返回到您的项目

  4. 然后重build你的C ++索引:Projects – > C / C ++ Index – > Rebuild