gpt4 book ai didi

c++11 - 使用 CMake 在 NVCC 中触发 C++11 支持

转载 作者:行者123 更新时间:2023-12-04 02:18:35 24 4
gpt4 key购买 nike

我正在使用 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,最近显然有这方面的工作。 ,但我一直无法找到结果。

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

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

来自 documentation , set(CUDA_PROPAGATE_HOST_FLAGS ON)将传播 CMAKE_CXX_FLAGS 的内容,因此以下内容会同时为 cpp 和 nvcc 触发 C++11:
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)

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

最佳答案

从 CMake 3.8(因为 CMake 支持 CUDA 作为一种语言)有一个新的目标属性 CUDA_STANDARD .虽然它的名字很困惑,但它添加了 -std=XXXnvcc编译命令。
使用最近的 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)

关于c++11 - 使用 CMake 在 NVCC 中触发 C++11 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36551469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com