我正在尝试使用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)
给出一个错误:Target "Foo"要求语言方言"cuda20";。但是,当前编译器"NVIDIA"不支持这个,或者CMake不知道
我花了一天时间尝试设置其他变量,将命令行参数传递给nvcc.exe等,但没有任何效果。CUDA 12文档也没有帮助我。我完全确定在我的整个系统上只有一个nvcc.exe,它在C:Program FilesNVIDIA GPU计算工具包CUDAv12.0bin中找到。
有什么想法如何让c++ 20与CUDA 12一起工作?
UPDATE3. make 3.25.2上线了!根据变更日志:
CUDA语言级别20(对应c++ 20)现在支持NVCC 12.0及以上版本。
这是现在支持的配置。只要更新到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.
!8008(合并)添加了c++ 20对NVCC
的支持
从那里,可以看到PR被合并到master和release中,这意味着您可以按照https://cmake.org/install/的说明从源代码构建CMake。或者,您可以使用CMake构建CMake,如下:
git clone https://gitlab.kitware.com/cmake/cmake
cd cmake
git checkout release
cmake . -B out
cmake --build out --config Release -j