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:
-
在C / C ++ Build(在项目设置)下,findPreprocessor Include Path并转到Providers选项卡 。 取消select除CDT GCC内置编译器设置以外的所有内容。 然后untag分享设置条目…。 将选项-std = c ++ 11添加到名为Command的文本框中以获取编译器规范。
-
去path和符号。 在符号下,单击还原默认值 ,然后应用。
笔记:
Eclipse对于应用程序是挑剔的,你需要每次离开设置选项卡。
[自我推销]:我基于上面写了我自己更详细的说明。 http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
感谢用户Nobody
在https://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 ::线程未解决的符号是:
-
转到首选项 – > C / C ++ – >生成 – >设置
-
select发现选项卡
-
selectCDT GCC内置编译器设置[共享]
-
将-std = c ++ 11添加到“获取编译器规范的命令”字段中,例如:
$ {COMMAND} -E -P -v -dD -std = c ++ 11 $ {INPUTS}
- 确定和重build索引的项目。
添加-std = c ++ 11到项目属性/ C / C ++构build – >设置 – >工具设置 – > GCC C ++编译器 – >其他 – >其他标志是不够的开普勒,但它是足够的老版本,如作为Helios。
我还不能评论,所以正在写我自己的答案:
它与__GXX_EXPERIMENTAL_CXX0X__
有关,并且对于Eclipse Juno和CDT 8.x是有效的。
这个答案的一些部分已经在其他的答案中涵盖,但我希望它是连贯的。
为了能够使用stdc ++ 11编译,必须为编译器添加特定的标志。 你可以通过项目属性来做到这一点。 修改项目属性RMB
和Project properties
或ALT + 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
-
点击“添加…”button
-
从下拉菜单中select“预处理器macros”
Name: __cplusplus Value: 201103L
-
点击应用,然后确定返回到您的项目
-
然后重build你的C ++索引:Projects – > C / C ++ Index – > Rebuild