我用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)
Run Code Online (Sandbox Code Playgroud)
我正在定义我的CUDA项目:
find_package(CUDA REQUIRED)
CUDA_ADD_EXECUTABLE(foo ${foo_src} ${foo_hdr} ${foo_cu})
Run Code Online (Sandbox Code Playgroud)
但C++ 11支持不会传播到NVCC.我要补充一下:
list(APPEND CUDA_NVCC_FLAGS "-std=c++11")
Run Code Online (Sandbox Code Playgroud)
这看起来像一个kludge.根据这项任务,最近有明显的工作,但我无法找到结果.
在将项目声明为C++ 11时,如何让CMake自动设置C++ 11标志?
编辑:我已经使用CUDA 8.0和CMake 3.5.1重新回答了这个问题.
从文档中, 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)
Run Code Online (Sandbox Code Playgroud)
但是,set(CMAKE_CXX_STANDARD 11)不会产生影响CMAKE_CXX_FLAGS,因此以下内容为C++ 11设备代码提供了编译器错误,因为没有任何内容可以传播:
set (CMAKE_CXX_STANDARD 11)
set (CUDA_PROPAGATE_HOST_FLAGS ON)
Run Code Online (Sandbox Code Playgroud)
我似乎找不到可以避免--std=c++11在CXX或CUDA标志中明确设置的CMake命令的组合.