直截了当:
我有以下文件结构:
我使用以下命令使用以下makefile编译此结构 “ make MODEL = mapB ”:
MODELDIR := ./$(MODEL)
MODULES := $(MODELDIR)
CFLAGS += -I. $(patsubst %,-I%,$(MODULES))
NVCFLAGS += -I. $(patsubst %,-I%,$(MODULES))
NVCC += nvcc
NVCFLAGS += -arch=sm_30 --ptxas-options=-O1
CFLAGS += -Wall -pedantic
LDLIBS += -lz -lpthread
CFLAGS += -g
SRCS += step.cu $(MODELDIR)/model.cu $(MODELDIR)/model_init.c \
main.c
OBJS += step.o $(MODELDIR)/model.o $(MODELDIR)/model_init.o
all: .depend runmodel
dims.h: gen_dims.sh
./gen_dims.sh 1024 1024
runmodel: ${OBJS} main.o
${NVCC} ${NVCFLAGS} ${LDLIBS} $^ -o $@
%.o: %.cu
${NVCC} ${NVCFLAGS} -dc $<
.PHONY: depend clean test
depend:
${NVCC} ${NVCFLAGS} -M ${SRCS} > .depend
.depend: ${SRCS} makefile dims.h
${NVCC} ${NVCFLAGS} -M ${SRCS} > .depend
clean:
${RM} ${OBJS} runmodel compare *.cmo *.cmx *.cmi *.o
include .depend
这会产生一个nvlink错误,即“ nvlink致命:无法打开输入文件'mapB / model.o ”
我查看了.o文件的放置位置以及使用此makefile生成的.o文件的文件结构如下所示:
有没有人知道为什么model.o文件出现在上层目录而不是子文件夹中,这使得以后在编译过程中无法找到它?
也欢迎解决此问题的解决方案。
答案 0 :(得分:3)
我没有nvcc可以玩,所以我无法确定,但我建议你试试这个,然后告诉我们结果:
%.o: %.cu
${NVCC} ${NVCFLAGS} -dc $< -o $@