nvcc 在哪里放置 .o 文件?当我编译时它们出现在错误的目录中
Where does nvcc place .o files? They appear in the wrong directory when I compile
开门见山:
我有以下文件结构:
- MapA: 生成文件,main.c,step.cu,step.h,mapB
- mapB: model.cu, model.cuh, model_init.c, model_init.h
我用下面的 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 文件如下所示:
- mapA: 生成文件,main.c,main.o,step.cu,step.o,step.h,model.o,
地图B
- mapB: model.cu, model.cuh, model_init.c, model_init.o, model_init.h
有没有人知道为什么 model.o 文件出现在上层目录而不是子文件夹中,这使得以后在编译过程中找不到它?
也欢迎提供解决此问题的解决方案。
我没有 nvcc 可以玩,所以我不能确定,但我建议你试试这个,然后告诉我们结果:
%.o: %.cu
${NVCC} ${NVCFLAGS} -dc $< -o $@
开门见山:
我有以下文件结构:
- MapA: 生成文件,main.c,step.cu,step.h,mapB
- mapB: model.cu, model.cuh, model_init.c, model_init.h
我用下面的 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 文件如下所示:
- mapA: 生成文件,main.c,main.o,step.cu,step.o,step.h,model.o, 地图B
- mapB: model.cu, model.cuh, model_init.c, model_init.o, model_init.h
有没有人知道为什么 model.o 文件出现在上层目录而不是子文件夹中,这使得以后在编译过程中找不到它?
也欢迎提供解决此问题的解决方案。
我没有 nvcc 可以玩,所以我不能确定,但我建议你试试这个,然后告诉我们结果:
%.o: %.cu
${NVCC} ${NVCFLAGS} -dc $< -o $@