首页 > 解决方案 > CMake 无法设置 CUDA 标准 c++17

问题描述

我正在使用 CMake 来配置 CUDA/C++ 项目。使用 NVCC 编译的一些文件需要 C++ 17 特性。要启用这些,我会使用:

cmake_minimum_required(VERSION 3.19)
project(RISA LANGUAGES CXX CUDA)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CUDA_STANDARD 17)

这会导致错误消息:

Target "RISA" requires the language dialect "CUDA17" (with compiler extensions), but CMake does not know the compile flags to use to enable it.

仔细检查CMAKE_CUDA_COMPILE_FEATURES变量显示cuda_std_03 cuda_std_11 cuda_std_14。出于某种原因,CMake 似乎对 C++14 之后的任何关于 CUDA 的内容一无所知。

我正在运行 ubuntu 20.04

我该怎么做才能使用此设置配置和编译 C++17?

我知道这个问题 - 但是仅使用 C++14 编译 cuda 文件的解决方案对我来说还不够。

标签: c++cmakecudac++17

解决方案


事实证明,CMake 没有使用正确的nvcc二进制文件。

就我而言,我在系统上有两个版本的 nvcc:

  • nvcc v10.1.243/usr/bin
  • nvcc v11.2.152/usr/local/cuda-11.2/bin

在我的 CMake 配置中,

  • CUDA_NVCC_EXECUTABLE设置为/usr/local/cuda-11.2/bin,但是
  • CMAKE_CUDA_COMPILER中设置为旧版本/usr/bin

设置CMAKE_CUDA_COMPILER正确路径后,CMake 能够检测nvcc 11.2.152并应用 C++17 标准。


推荐阅读