如何在VS2019 CUDA项目中启用C++17代码生成

3

我正在将一些代码从一台安装有VS2017的电脑移动到另一台安装有VS2019的电脑上。除了不能使用std::filesystem之外,一切都很好。在我的旧代码中,我使用了C++14,并使用了std::experimental::filesystem。在新代码中,我想要升级到C++17,所以我改为使用std::filesystem(如下面的代码所示)。奇怪的是,Intellisense(我不确定这是否是正确的名称)没有显示错误。当我输入std::f时,它甚至显示filesystem。

enter image description here

但是代码无法构建并报错“namespace“std”没有成员“filesystem””。

我将C++语言标准更改为c++latest,VS2019版本为Community 16.6.5。

#include <string>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;

int main()
{
    std::string path = "C:\\";
    for (const auto& entry : fs::directory_iterator(path))
        std::cout << entry.path() << std::endl;
}

编辑:我最初问题的最后一行可能不够清晰:我已经将“C++语言标准”改为C++17或C++latest。

编辑:根据要求,输出内容如下: enter image description here

感谢@drescherjm,我们发现这是一个Cuda问题。有没有Cuda专家有什么想法?


5
你是否指定了 /std:c++14/std:c++17/std:c++latest - user1143634
2
你应该在项目属性 - C/C++ - C++ 语言标准中将你的 C++ 语言标准设置为 C++17,以利用 C++17 的特性。 - John Park
3
看起来错误是来自于Cuda编译器而不是Visual Studio。我对此不太熟悉,但我不认为cuda会处理std::filesystem。 - drescherjm
1
@drescherjm 非常感谢您的帮助! - Philippe Huber
2
目前您已将其设置为CUDA项目(很好)。 在这种情况下,在VS2019中转到Project..Properties..Configuration Properties...CUDA C/C++...Command Line 然后你会在对话框右下方看到一个标记为“附加选项”的框。 在该框中,输入以下内容:-std=c++17 -Xcompiler "/std:c++17 " 然后单击 "应用" 再重新构建。 - Robert Crovella
显示剩余10条评论
1个回答

6
使用CUDA 11,nvcc编译器驱动程序能够支持特定的C++17语言特性的使用。目前,在VS2019中,这似乎不是默认行为。
以下方法应该适用于在VS2019中编译cuda项目时启用C++17支持:
转到Project..Properties..Configuration Properties...CUDA C/C++...Command Line,然后您将在对话框右下方看到一个标有“Additional Options”的框。在该框中,输入以下内容:
-std=c++17 -Xcompiler "/std:c++17"

然后点击“应用”,再重新构建。 项目属性

(这些说明可能会因CUDA或Visual Studio的未来版本而更改。)

请注意,此方法仅适用于CUDA项目(即在编译时调用nvcc),并且无论您的代码是以.cpp结尾还是以.cu结尾,都应该可行。对于非CUDA项目,this可能有所帮助。

std::filesystem功能似乎需要C++17。 CUDA nvcc编译器驱动程序的文档在这里


非常感谢你,Robert! - Philippe Huber

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