在makefile错误中编译cuda文件

Posted

技术标签:

【中文标题】在makefile错误中编译cuda文件【英文标题】:compiling cuda file in makefile error 【发布时间】:2011-11-02 13:13:00 【问题描述】:

我制作了一个 makefile 来编译我的文件:

CFLAGS        = -O3 -Wall -I /usr/local/cuda/include/ 
NVCCFLAGS     = -O3 -arch sm_20
LDFLAGS       = -O3 -L/usr/local/cuda/lib64 -lcudart
EXE           =  runAPP

app.o:app.cu
$(NVCC) $(NVCCFLAGS) -c $< -o $(CPPFLAGS) $(LIB_PATH) $(LDFLAGS) $@

$(EXE): app.o 
    $(NVCC) $(NVCCFLAGS) $(CFLAGS) $(LDFLAGS) -o $@  $(CPPFLAGS) $(LIB_PATH) app.o  \
        -lANN_char -lz
    cp $@ ../bin

但我遇到了这个问题:

app.cpp:26:26: 错误: cuda_runtime.h: 没有这样的文件或目录 app.cpp:27:18:错误:cuda.h:没有这样的文件或目录

这就是我将它们包含在 app.cpp 中的方式:

#include <cuda.h>
#include <cuda_runtime.h>

为什么会出现这个问题?

我在google上搜索,他们说app.cpp必须总是app.cu,是真的吗?

提前致谢。

【问题讨论】:

您没有显示app.o 的编译规则。它是如何编译成对象的? 您展示的makefile仅描述了如何通过链接app.o和一些库来构建runApp。但是您还没有显示app.o 的构建规则。我要你给我看。 app.o: app.cu $(NVCC) -c % 我刚刚添加了,但我得到了:缺少分隔符 请编辑问题以显示实际的 makefile 和实际错误...... 【参考方案1】:

如果你的makefile,你有:

CFLAGS        = -O3 -Wall -I /usr/local/cuda/include/ 
NVCCFLAGS     = -O3 -arch sm_20
LDFLAGS       = -O3 -L/usr/local/cuda/lib64 -lcudart
EXE           =  runAPP

app.o:app.cu $(NVCC) $(NVCCFLAGS) -c $$(CPPFLAGS) $(LIB_PATH) $(LDFLAGS) $@

CPPFLAGS 应该扩展为空;尝试将其更改为 CFLAGS,或将 CFLAGS 更改为 CPPFLAGS。

【讨论】:

没问题。我自己也分享了那些时刻。 :)

以上是关于在makefile错误中编译cuda文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 makefile 中包含和编译库

Makefile 多目录自动编译

在ubuntu中用cuda编译opencv的makefile停止工作

linux里面的make和makefile是做啥的?

Makefile使用总结

转载-------makefile 使用总结