在cmake中使用nvcc编译.cu

Kal*_*ala 1 cuda cmake nvcc c++11

我有一个opencv c ++脚本,我需要在其中使用cudamemcpy.所以我在我的脚本中使用了cudamemcpy并将文件保存为.cu我正在使用cmake.所以我添加了.cu作为cuda_executable.但是当我使用"sudo make"时,我收到以下错误

我得到的错误

这是makefile 的CMakeLists.txt

所以在第27行,我将c ++ 0x改为c ++ 11,我得到了同样的错误,所以我尝试了gnu ++ 11,但我仍然有同样的错误.

hav*_*ogt 5

问题是,如果通过它传递,-std=c++11则不会添加到nvcc构建命令add_definitions().从FindCUDA cmake文档:

传递到带有-D或/ D的add_definitions的标志将传递给nvcc.

其他选项如未-std=c++11传递给nvcc.

您可以c++11通过将其添加到全局来全局启用CUDA_NVCC_FLAGS

set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11" )
Run Code Online (Sandbox Code Playgroud)

或者在每个目标级别上

cuda_add_executable(opencv opencv.cu OPTIONS -std=c++11)
Run Code Online (Sandbox Code Playgroud)

正如talonmies在评论中指出的那样:如果您只需要运行时API中的函数,cudaMemcpy()就可以在普通的C++中使用它们 - 文件(不需要.cu扩展名).然后,您需要包含cuda_runtime_api.h并链接到cuda运行时库cudart.(确保cuda include目录位于include-path和库路径中的库中,如果用于nvcc编译,则会自动处理.)


更新

设置为较新版本的CMake的C++标准的正确方法在此说明:在NVCC触发C++ 11支持通过CMake