Eclipse/Nsight(7.0)以及C++11支持

3

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。我非常讨厌它。

1
如果你不喜欢Eclipse,为什么不使用另一个IDE?你可以随意使用任何你想要的IDE。除此之外,你尝试过这里建议的内容吗:https://dev59.com/2mox5IYBdhLWcg3wjE5i 和 https://dev59.com/X2Qn5IYBdhLWcg3wETk5? - m.s.
1
我确实讨厌Eclipse,但是我不使用其他IDE,因为Eclipse(Nsight)是CUDA Toolkit的一部分。我认为没有其他IDE能够识别CUDA内核并相应地突出语法。更不用说像Nsight那样支持使用cuda-gdb进行调试了。除此之外,我确实尝试了那些建议。它们中的大多数都是针对旧版本的,并且其中一些甚至建议与我上面描述的相同的事情。当我执行它们时,我会得到上面写的错误。 - Alfis
1
我有同样的问题。你解决了吗? - Flamefire
并不是真的。有趣的是,使用GCC单独编译时,加上-std=c++11选项可以正常工作,但使用NVCC却不能。例如,C++项目可以支持C++11特性,但CUDA项目则不行。我已经不再关心这个问题,承受一些红线。我使用自定义的makefile进行编译。通过IDE只会调用make all命令。 - Alfis
1个回答

2
我在使用本地编译器时遇到了与索引器类似的问题; 但是交叉编译器可以正常工作。当使用本地编译器时,即使已将C ++语言版本设置为C++11并重新建立索引,__cplusplus仍定义为199711L。
可以通过以下步骤让索引器识别C++11设置:
项目设置-> C / C ++通用-> 预处理器包括路径、宏等-> 提供程序-> CDT GCC内置编译器设置
然后执行以下操作:
1. 取消选中“在项目之间共享全局提供程序”。 2. 将-std=c++11 添加到“获取编译器规格的命令”中,如下所示: ${COMMAND} -std=c++11 ${FLAGS} ... 这样,__cplusplus就可以正确设置。

你说的本地编译器是指哪个?GCC吗? - Alfis
我的意思是GCC的版本,它会为运行编译器的系统生成二进制文件。在我的情况下,本地编译器是在x86_64笔记本电脑上运行的GCC;而非交叉编译器,后者会为我构建ARM二进制文件。 - wandns
我无法尝试它,因为我不再安装Eclipse。我希望这是一个正确的解决方案,而不是Nsight特定的东西。 - Alfis

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