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

时间:2016-10-13 15:53:09

标签: makefile cuda nvidia nvcc

直截了当:

我有以下文件结构:

  • MapA:makefile,main.c,step.cu,step.h,mapB
  • mapB:model.cu,model.cuh,model_init.c,model_init.h

我使用以下命令使用以下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文件的文件结构如下所示:

  • mapA:makefile,main.c,main.o,step.cu,step.o,step.h,model.o, mapB
  • mapB:model.cu,model.cuh,model_init.c,model_init.o,model_init.h

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

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

1 个答案:

答案 0 :(得分:3)

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

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