TL;DR:
我该怎样让Nsight相信我正在使用C++11?换句话说,我在哪里设置相关的发现选项?使用-std=c++11构建是有效的,即使在Eclipse中也是如此。我说的是索引���在定义方面遇到问题。
详细说明:
在Nsight编辑器中,C++11函数标记为未解决,因为__cplusplus定义为199711L,而不是201103L及以上。
当我创建项目时,在项目属性>构建>发现选项
中,对于每种语言和每个构建配置,都选中了自动发现路径和符号
选项。属性窗口底部有一条注释,表示发现方法已过时,因此我取消了每种语言和每个构建配置的选择。
现在,在项目属性>常规>预处理器包含路径、宏等
下,有系统提供的路径和定义(更准确地说,由提供程序提供)。在列表中,我可以看到问题所在的__cplusplus。我可以在CDT用户设置条目下重新定义它,确实在重建索引后它将成为新值,但是当我单击编辑器中的某些内容时,就会出现错误:
An internal error occurred during: "Notifying selection listeners".
org.eclipse.cdt.internal.core.index.composite.CompositingNotImplementedError
那条路显然是死路。另一种选择是在“项目属性 > 常规 > 路径和符号”下的“符号”选项卡中定义新的__cplusplus。我也能看到“错误”的__cplusplus。在那里重新定义它会在重建索引后,在编辑器中单击后给我相同的错误。
此外,“CDT Managed Build Setting Entries”提供程序到底是什么鬼?我没有看到任何选项。它在哪里配置?
当我尝试使用“CDT GCC内置编译器设置”提供程序时,我看到一个可以输入命令行参数的字段,但是在那里放置-std=c++11没有效果,因为该条目不生成__cplusplus定义。
离题:
另外,CUDA Toolkit 7.0的C++11支持非常好,可以在命令行和makefile中使用。让我非常难过的是nVidia决定使用Eclipse。无论我怎么做,我都只遇到了麻烦。花了我一周时间才为一个项目设置IDE。我非常讨厌它。
-std=c++11
选项可以正常工作,但使用NVCC却不能。例如,C++项目可以支持C++11特性,但CUDA项目则不行。我已经不再关心这个问题,承受一些红线。我使用自定义的makefile进行编译。通过IDE只会调用make all
命令。 - Alfis