c++ - 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
- NVCC 11.2
- 海合会 10.1.0
- CMake 3.19.6
我该怎么做才能使用此设置配置和编译 C++17?
我知道这个问题 - 但是仅使用 C++14 编译 cuda 文件的解决方案对我来说还不够。
解决方案
事实证明,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 标准。
推荐阅读
- naivebayes - 标准化如何影响 Naive Bays 分类器
- python - 如何在数据库中保存数据属性?
- php - 使用 php 和 ajax 调用在表单提交上上传单张图片
- linux - 如果将输出重定向到文件,Linux 进程行为异常 (MQTT)
- c# - Entityframework ObjectContext 刷新更改的实体
- html - 以 Angular 形式显示 img 会给出“具有未指定名称属性的表单控件的无值访问器”
- macos - 软件包名称未显示在我的 pkg 的安装对话框中
- sql - 连接表的 sql 计数
- java - 在 Spring Boot 和 Tomcat 中使用 ObjectBox 作为服务器数据库
- nativescript - Nativescript:嵌套的 RadListView 不保留页面导航上的滚动位置