CUDA 12 C++20支持,CMake不工作

z9zf31ra  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(301)

我正在尝试使用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 GPU Computing Toolkit\CUDA\v12.0\bin。
有什么想法可以让C++20与CUDA 12一起工作吗?

n6lpvg4x

n6lpvg4x1#

现在看来,我们必须等到CMake 3.25.2版本才能支持CUDA 12.0 with C20。查看这里最近的讨论以了解更多细节:https://gitlab.kitware.com/cmake/cmake/-/issues/23079
然而,大约一个月前,为了支持这种配置,必要的更改被合并到cmake/master中,它们也在release分支中。
如果您像我一样,必须立即使用CUDA 12.0和C
20,那么您可以从源代码构建CMake,甚至可以使用CMake!https://cmake.org/install/构建CMake

git clone https://gitlab.kitware.com/cmake/cmake
cd cmake
git checkout release
cmake . -B out
cmake --build out --config Release -j

从这里,只需找到生成的可执行文件(我使用的是Windows,所以我的文件在cmake/out/bin/Release/cmake.exe中),然后使用该文件而不是系统CMake来构建CUDA 12/C++20项目。
CMakeLists.txt

cmake_minimum_required (VERSION 3.25.1-g7aed5f7)

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_minimum_required版本来匹配你使用的特定提交,这不是一个真正的可移植解决方案。
祝你好运!我会在3.25.2正式上线并可以使用时更新这个答案,而不需要从源代码构建。

相关问题