Eclipse完全支持C++11

32

我正在寻找在Eclipse上获得完整的C++11支持的方法。

在Eclipse Juno中,我使用了__GXX_EXPERIMENTAL_CXX0X__有许多新功能,但我没有发现对std::threadsstd::mutex等的支持。

如何才能拥有所有C++11函数的自动完成?

编辑:解决方案

进入项目->属性->C/C++一般->路径和符号->标签[符号]。 添加符号:__cplusplus,值为201103L


1
我对Eclipse Kepler没有任何问题。但是它确实需要向配置中添加相当多的符号。你发现它做不到什么? - Joe
这行代码:"std::mutex _myMutex;" 在Eclipse Juno上会产生一个"Type 'std::mutex' could not be resolved"错误。 - Jerome
请注意,IDE并不一定与特定的工具链相关。 - Jarod42
我不是很理解你的回答“Joe”。你是如何使用gcc符号在Eclipse中解决C++11问题的?我认为“gcc -dM -E - < /dev/null”给出的所有符号并不都与C++11有关。 - Jerome
1
@Ali:是的,我们与Petr Budnik进行了一次关于这个主题的私人对话,并得出结论,我在“编辑”中发布的解决方案是最好的。由于这次对话给了我答案,所以我将其标记为“已接受的答案”。 - Jerome
显示剩余9条评论
2个回答

17

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 代码。

请注意,这是工作区范围的设置。如果您不想在工作区设置它,可以按项目设置。


1
也许,我应该补充说明一下,我现在使用的是Eclipse Kepler。但我相信在Juno上也能工作。哦,而且这样你就不需要定义__GXX_EXPERIMENTAL_CXX0X__符号了...再确认一下,你在Eclipse中有可用的头文件吗?我的意思是,它是否可以在包含路径中找到标准的threadmutex头文件? - lapk
这很奇怪,Eclipse 能找到头文件但是说“无法解析类型 'std::mutex'”,即使我重新创建了项目... - Jerome
使用gcc(Ubuntu / Linaro 4.8.1-10ubuntu9)4.8.1。 当我打开“<mutex>”时,我看到开头是#if __cplusplus < 201103L # include <bits/c++0x_warning.h>,然后是灰色的else...。这是否意味着我的“__cplusplus”变量不符合要求? - Jerome
3
不,这很好。灰色表示这是非活动代码。这意味着Eclipse识别的C ++版本不低于C ++ 11(201103 = 2011年3月,当时委员会批准了C ++ 11)... gcc版本也可以。我想这必须是Eclipse索引器中的一些故障。尝试右键单击项目,选择“索引->刷新所有文件”,然后选择“索引->重新构建”。 - lapk
哇,等一下。__cplusplus是编译器定义的标准宏。像我们讨论的那样添加-std=c++11会使索引器假定(可以这么说)编译器将该宏定义为201103L(以及其他内容),以使用C++11。重新定义此宏确实是非常丑陋和危险的hack,因为标准头文件和第三方库可能依赖于该值恰好等于201103L。之后你可能无法编译... 你的Eclipse CDT安装有问题。你不应该需要这样的hack来获得正确的索引... - lapk
显示剩余12条评论

-1

是否有一个编译器完全支持C++11?如果你使用的是Windows系统,我认为你应该尝试一下Microsoft Visual Studio Express Edition 2013。它对C++11的支持虽然不完整但在我看来相当不错,而且看起来未来会变得更好。


好的,那我就不再多说了 :) - Christian Hackl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接