【问题标题】:Triggering C++11 support in NVCC with CMake使用 CMake 在 NVCC 中触发 C++11 支持
【发布时间】:2020-10-22 17:31:13
【问题描述】:

我正在运行带有 CUDA 7.5 的 Ubuntu 15.10。 CMmake 是 v3.2.2,NVCC 是 release 7.5,v7.5.17; GCC 是 Ubuntu 5.2.1-22ubuntu2 v5.2.1

在常规项目中触发 C++11 很容易:

project(foo CXX)
set(TARGET foo CMAKE_CXX_STANDARD 11)

我正在定义我的 CUDA 项目:

find_package(CUDA REQUIRED)
CUDA_ADD_EXECUTABLE(foo ${foo_src} ${foo_hdr} ${foo_cu})

但 C++11 支持不会传播到 NVCC。我必须补充:

list(APPEND CUDA_NVCC_FLAGS "-std=c++11")

这似乎是一个杂牌。根据this task,最近显然有这方面的工作,但我一直无法找到结果。

如何让 CMake 在将项目声明为 C++11 时自动设置 C++11 标志?

编辑:我已经用 CUDA 8.0 和 CMake 3.5.1 重新回答了这个问题。

documentationset(CUDA_PROPAGATE_HOST_FLAGS ON) 将传播CMAKE_CXX_FLAGS 的内容,因此以下会触发 C++11 的 cpp 和 nvcc:

set (CMAKE_CXX_FLAGS "--std=c++11")
set (CUDA_PROPAGATE_HOST_FLAGS ON)

但是,set(CMAKE_CXX_STANDARD 11) 不会影响 CMAKE_CXX_FLAGS,因此下面给出了 C++11 设备代码的编译器错误,因为没有什么可以传播:

set (CMAKE_CXX_STANDARD 11)
set (CUDA_PROPAGATE_HOST_FLAGS ON)

我似乎找不到避免在 CXX 或 CUDA 标志中明确设置 --std=c++11 的 CMake 命令组合。

【问题讨论】:

  • 尝试将 CUDA_PROPAGATE_HOST_FLAGS 设置为 ON(尽管默认情况下应该设置为 ON),然后使用 -std=c++11 设置 CMAKE_CXX_FLAGS。
  • 尝试将 CUDA_PROPAGATE_HOST_FLAGS 设置为 ON。没用。命令 set(TARGET foo CMAKE_CXX_STANDARD 11) 已经在编译器中触发了 C++11 支持。在此之上添加 set(CMAKE_CXX_FLAGS "-std=c++11") 似乎是多余的。
  • 我认为这个功能取决于你的 cmake 版本。在我的情况下,使用 cmake 3.5.0 设置 CMAKE_CXX_FLAGS-std=c++11 并让 CUDA_PROPAGATE_HOST_FLAGS 自动触发 cmake 添加 --std c++11(到 nvcc)。
  • 我更新到 CMake 3.5.1 并且一直在查看 FindCUDA.cmake。在将 CMAKE_CXX_STANDARD 设置为 11 后,我正在打印 CMAKE_CXX_FLAGS 的值,并且很惊讶它是空的。我认为 CMake 应该根据 CMAKE_CXX_STANDARD 的值和其他变量来填充它是不是错了?
  • @AndreasYankopolus 同样的问题。 CMake 3.10.0 和 CUDA 9.0。

标签: c++11 cuda cmake


【解决方案1】:

从 CMake 3.8 开始(因为 CMake 支持 CUDA 作为一种语言),有一个新的目标属性 CUDA_STANDARD。虽然它的名字相当混乱,但它在nvcc 编译命令中添加了-std=XXX

对于最近的 CMake 版本,正确的方法是

cmake_minimum_required(VERSION 3.8.2)
enable_language(CUDA)
add_executable(foo ${foo_src} ${foo_cu})
set_property(TARGET foo PROPERTY CUDA_STANDARD 11)

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 2017-02-24
    • 1970-01-01
    • 2018-07-21
    • 2012-06-14
    • 2016-04-29
    • 2012-11-29
    • 2015-01-08
    • 2012-09-24
    相关资源
    最近更新 更多