我正在寻找在Eclipse上获得完整的C++11支持的方法。
在Eclipse Juno中,我使用了__GXX_EXPERIMENTAL_CXX0X__
有许多新功能,但我没有发现对std::threads
、std::mutex
等的支持。
如何才能拥有所有C++11函数的自动完成?
编辑:解决方案
进入项目->属性->C/C++一般->路径和符号->标签[符号]
。
添加符号:__cplusplus,值为201103L
我正在寻找在Eclipse上获得完整的C++11支持的方法。
在Eclipse Juno中,我使用了__GXX_EXPERIMENTAL_CXX0X__
有许多新功能,但我没有发现对std::threads
、std::mutex
等的支持。
如何才能拥有所有C++11函数的自动完成?
编辑:解决方案
进入项目->属性->C/C++一般->路径和符号->标签[符号]
。
添加符号:__cplusplus,值为201103L
Eclipse可以很好地支持C++11(索引器等):Juno和Kepler都可以。重要的是,您必须让Eclipse知道您将使用C++11支持进行编译。这可以通过在“C/C++->Build->Settings->Discovery [tab]”中向“CDT GCC Builtin Compiler Settings”提供附加标志-std=c++11
来完成,因此它将类似于:
${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
只需要这样做,就可以让 Kepler/Juno 正确地突出显示 C++11 代码。
请注意,这是工作区范围的设置。如果您不想在工作区设置它,可以按项目设置。
__GXX_EXPERIMENTAL_CXX0X__
符号了...再确认一下,你在Eclipse中有可用的头文件吗?我的意思是,它是否可以在包含路径中找到标准的thread
和mutex
头文件? - lapk#if __cplusplus < 201103L # include <bits/c++0x_warning.h>
,然后是灰色的else...
。这是否意味着我的“__cplusplus”变量不符合要求? - Jeromegcc
版本也可以。我想这必须是Eclipse索引器中的一些故障。尝试右键单击项目,选择“索引->刷新所有文件”,然后选择“索引->重新构建”。 - lapk__cplusplus
是编译器定义的标准宏。像我们讨论的那样添加-std=c++11
会使索引器假定(可以这么说)编译器将该宏定义为201103L
(以及其他内容),以使用C++11。重新定义此宏确实是非常丑陋和危险的hack,因为标准头文件和第三方库可能依赖于该值恰好等于201103L
。之后你可能无法编译... 你的Eclipse CDT安装有问题。你不应该需要这样的hack来获得正确的索引... - lapk是否有一个编译器完全支持C++11?如果你使用的是Windows系统,我认为你应该尝试一下Microsoft Visual Studio Express Edition 2013。它对C++11的支持虽然不完整但在我看来相当不错,而且看起来未来会变得更好。