在cmake中使用nvcc编译.cu

时间:2016-01-23 07:26:33

标签: c++11 cuda cmake nvcc

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

error I get

这是makefile cmakelists.txt

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

1 个答案:

答案 0 :(得分:5)

问题是-std=c++11如果通过nvcc传递,则add_definitions()未添加到-std=c++11构建命令。来自FindCUDA cmake documentation

  

使用-D或/ D传递到add_definitions的标志将传递给nvcc。

nvcc等其他选项不会传递给c++11

您可以通过将CUDA_NVCC_FLAGS添加到set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11" )

来全局启用cuda_add_executable(opencv opencv.cu OPTIONS -std=c++11)
cudaMemcpy()

或使用

在每个目标级别上
cuda_runtime_api.h

正如talonmies在评论中指出的那样:如果您只需要运行时API中的函数,例如cudart,您可以在普通的C ++文件中使用它们(不需要.cu扩展名)。然后,您需要包含nvcc并链接到cuda运行时库icon.png。 (确保cuda include目录位于include-path和库路径中的库中,如果使用from Tkinter import * root = Tk() icon = PhotoImage(file='icon.png') root.tk.call('wm', 'iconphoto', root._w, icon) root.mainloop() 进行编译,则会自动处理。)

更新

此处解释了为更新版本的CMake设置c ++标准的正确方法:Triggering C++11 support in NVCC with CMake