在Makefile中编译CUDA文件出错

3

我制作了一个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>

为什么会出现这个问题?

我在谷歌上搜索,他们说app.cpp必须始终为app.cu,这是真的吗?

提前致谢。


你没有为 app.o 指定编译规则。它是如何编译成目标文件的? - talonmies
你展示的makefile只描述了如何通过链接'app.o'和一些库来构建'runApp'。但是你没有展示'app.o'的构建规则。我要求你展示给我。 - talonmies
app.o: app.cu $(NVCC) -c %< $(CFLAGS) $(LDFLAGS) -o $@ - olidev
我刚刚添加了那个,但是出现了错误:缺少分隔符。 - olidev
请编辑问题以显示实际的Makefile和实际的错误信息。 - talonmies
1个回答

4
如果你的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) $@
则CPPFLAGS应该被扩展为空;尝试将其更改为CFLAGS,或将CFLAGS更改为CPPFLAGS。

没问题。我自己也经历过这样的时刻。 :) - trycatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接