nvcc 在哪里放置 .o 文件?当我编译时它们出现在错误的目录中

Where does nvcc place .o files? They appear in the wrong directory when I compile

开门见山:

我有以下文件结构:

我用下面的 makefile 编译这个结构,使用命令 "制作模型=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 fatal : Could not open input file 'mapB/model.o

我查看了 .o 文件的放置位置,我的文件结构以及使用此 makefile 生成的 .o 文件如下所示:

有没有人知道为什么 model.o 文件出现在上层目录而不是子文件夹中,这使得以后在编译过程中找不到它?

也欢迎提供解决此问题的解决方案。

我没有 nvcc 可以玩,所以我不能确定,但​​我建议你试试这个,然后告诉我们结果:

%.o: %.cu
    ${NVCC} ${NVCFLAGS} -dc $< -o $@