我正在运行带有 CUDA 7.5 的 Ubuntu 15.10。 CMmake 是 v3.2.2,NVCC 是版本 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")
这看起来像是一个拼凑。据报道,最近显然有这方面的工作这个任务 http://redmine.gromacs.org/issues/1390,但我一直找不到结果。
在将项目声明为 C++11 时,如何让 CMake 自动设置 C++11 标志?
编辑:我已经使用 CUDA 8.0 和 CMake 3.5.1 重新回答了这个问题。
来自文档 https://cmake.org/cmake/help/v3.1/module/FindCUDA.html, 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)
我似乎找不到避免显式设置的 CMake 命令组合--std=c++11
在 CXX 或 CUDA 标志中。