我正在运行Ubuntu 15.10,使用CUDA 7.5。CMake版本为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")
这似乎是一个修补方法。根据此任务的描述,最近对此进行了工作,但我尚未找到结果。
如何让CMake在将项目声明为C++11时自动设置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)
然而,
set(CMAKE_CXX_STANDARD 11)
不会影响 CMAKE_CXX_FLAGS
,因此以下内容将针对 C++11 设备代码产生编译器错误,因为没有东西可以传播:set (CMAKE_CXX_STANDARD 11)
set (CUDA_PROPAGATE_HOST_FLAGS ON)
我似乎找不到一组CMake命令,可以避免在CXX或CUDA标志中明确设置--std=c++11
。
CMAKE_CXX_FLAGS
为-std=c++11
并自动触发CUDA_PROPAGATE_HOST_FLAGS
会使cmake添加--std c++11
(到nvcc)。 - Hopobcn