【问题标题】:How to enable C++17 code generation in VS2019 CUDA project如何在VS2019 CUDA项目中启用C++17代码生成
【发布时间】:2020-07-24 03:14:00
【问题描述】:

我正在将一些代码从一台电脑上的 VS2017 移动到另一台装有 VS2019 的电脑上。一切都很好,除了我不能使用 std::filesystem。在我以前的代码中,我使用的是 C++14 并且有 std::experimental::filesystem。在新代码中,我想移至 C++17,因此我更改为 std::filesystem(如下面的代码所示)。奇怪的是智能感知(不确定它是否是正确的名称)没有显示错误。当我输入 std::f... 时,它甚至会显示文件系统...

但代码不会构建并给出错误“命名空间“std”没有成员“文件系统”。

我将 C++ Language Standard 更改为 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。

编辑:根据要求,输出:

感谢@drescherjm,我们发现这是一个 Cuda 问题。来自 Cuda 专家的任何想法?

【问题讨论】:

  • 您是否指定了/std:c++14/std:c++17/std:c++latest
  • 您应该在项目属性 - C/C++ - C++ 语言标准中将 C++ 语言标准设置为 C++17,以利用 C++17 的功能。
  • 似乎错误来自 Cuda 编译器而不是 Visual Studio。我对此并不熟悉,但我不希望 cuda 处理 std::filesystem。
  • @drescherjm 非常感谢您的帮助!
  • 目前您已将其设置为 CUDA 项目(这很好)。在这种情况下,在 VS2019 中转到 Project..Properties..Configuration Properties...CUDA C/C++...Command Line 然后您将在对话框的右侧底部看到一个标有“附加选项”的框。在该框中,输入以下内容:-std=c++17 -Xcompiler "/std:c++17 " 然后单击“应用”然后重建。

标签: c++ cuda visual-studio-2019


【解决方案1】:

使用 CUDA 11,nvcc 编译器驱动程序能够支持certain C++17 language features 的使用。目前,在 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 编译器驱动程序记录在 here

【讨论】:

  • 非常感谢罗伯特!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 2021-05-05
  • 2019-11-15
相关资源
最近更新 更多