我正在尝试使用 CMake 3.25 在 Visual Studio 2022 的 CUDA 12 中启用新的 C++20 支持。如果我设置这些变量
set(CMAKE_CUDA_STANDARD 20) # works with 17, but not 20
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
然后当我的项目被宣布时
project(Foo LANGUAGES CXX CUDA)
它给出一个错误:目标“Foo”需要语言方言“CUDA20”。但是
当前编译器“NVIDIA”不支持此功能,或者CMake不知道
标志来启用它。
我花了一天时间尝试设置其他变量,将命令行参数传递给 nvcc.exe 等,但没有任何效果。 CUDA 12 文档也没有帮助我。我绝对确定我的整个系统上只有一个 nvcc.exe,它位于 C:\Program Files\NVIDIA GPUComputing Toolkit\CUDA\v12.0\bin 中。
有什么想法可以让 C++20 与 CUDA 12 一起使用吗?
UPDATE:CMake 3.25.2 已上线!根据变更日志 https://cmake.org/cmake/help/latest/release/3.25.html#id2:
NVCC 12.0 及更高版本现在支持 CUDA 语言级别 20(对应于 C++20)。
现在这是受支持的配置。只需更新到 CMake 3.25.2,您就可以开始使用了。
CMakeLists.txt
cmake_minimum_required (VERSION 3.25.2)
project (MyAwesomeCUDA12WithCpp20Project LANGUAGES CUDA CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CUDA_STANDARD 20)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
...
在此版本之前,唯一可用的解决方案是从源代码构建 CMake。如果将来发生类似的情况(尖端 SDK 无法协同工作),请尝试搜索 Kitware 的 GitLab 上的最新讨论。在这种情况下,这个讨论中暗示了答案:https://gitlab.kitware.com/cmake/cmake/-/issues/23079 https://gitlab.kitware.com/cmake/cmake/-/issues/23079.
!8008(合并) https://gitlab.kitware.com/cmake/cmake/-/merge_requests/8008添加了对 NVCC 的 C++20 支持
从那里可以看到 PR 已合并到主版本和版本中,这意味着您可以按照以下说明从源代码构建 CMakehttps://cmake.org/install/ https://cmake.org/install/。或者,您可以使用 CMake 构建 CMake,如下所示:
git clone https://gitlab.kitware.com/cmake/cmake
cd cmake
git checkout release
cmake . -B out
cmake --build out --config Release -j
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)