makefile为cuda代码

时间:2014-11-25 21:35:46

标签: cuda makefile

好的,这里我的makefile有问题。 我有文件MatMulCpu.cu,MatMulGPU.cu,MatMulGPU_ms.cu 我想编译它们并编译文件MatMul.cu,它需要这三个文件。 这是我的makefile ...

CC=nvcc
EXEC=MatMul

all: $(EXEC)
MatMul: MatMulGPU_ms.o MatMulCPU.o MatMulGPU.o
$(CC) -o MatMul MatMulCPU.o MatMulGPU.o MatMulGPU_ms.o

MatMulCPU.o: MatMulCPU.cu
$(CC) -o MatMulCPU.o MatMulCPU.cu

MatMulCPU.o: MatMulGPU.cu
$(CC) -o MatMulGPU.o MatMulGPU.cu

MatMulCPU.o: MatMulGPU_ms.cu
$(CC) -o MatMulGPU_ms.o MatMulGPU_ms.cu

clean:
rm -rf *.o

mrproper: clean
rm -rf MatMul

我有这些警告和错误:

makefile:12: warning: overriding commands for target `MatMulCPU.o'
makefile:9: warning: ignoring old commands for target `MatMulCPU.o'
makefile:15: warning: overriding commands for target `MatMulCPU.o'
makefile:12: warning: ignoring old commands for target `MatMulCPU.o'
make: *** No rule to make target `MatMulGPU.cu', needed by `MatMulCPU.o'.  Stop.

不知道该解决什么问题。在互联网上搜索了几个makefile,但它无法帮助我:/

编辑:好的,谢谢,我现在修改了makefile,看起来没问题

CC=nvcc
EXEC=MatMul

all: $(EXEC)
MatMul: MatMulGPU_ms.o MatMulCPU.o MatMulGPU2.o
$(CC) -o MatMul MatMulCPU.o MatMulGPU2.o MatMulGPU_ms.o

MatMulCPU.o: MatMulCPU.cu
$(CC) -o MatMulCPU.o MatMulCPU.cu

MatMulGPU2.o: MatMulGPU2.cu
$(CC) -o MatMulGPU2.o MatMulGPU2.cu

MatMulGPU_ms.o: MatMulGPU_ms.cu
$(CC) -o MatMulGPU_ms.o MatMulGPU_ms.cu

clean:
rm -rf *.o

mrproper: clean
rm -rf MatMul

但现在我有其他错误......

MatMulGPU.o: In function `_start':
(.text+0x0): multiple definition of `_start'
[...manythings_here_that_shows_all_the_multiple_definitions...]
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o:/build/buildd/eglibc-2.19/csu/../sysdeps/x86_64/start.S:118: first defined here

我有一些东西,比如_fini,IO_stdin_used,_data_start,_dso_handle ......我不知道它是什么!

这是由于make文件还是代码?

似乎也说其他东西,比如主要功能或Matrix定义,据说不止一次定义......但定义不在同一个文件中!例如,我在MatMulCPU.cu和MatMulGPU2.cu中有一个Matrix定义,那为什么它是一个问题......? :/

1 个答案:

答案 0 :(得分:1)

您多次指定相同的目标(MatMulCPU.o)。没有必要这样做。但是你应该为每个将要构建的对象(.o)设定一个目标。

试试这个:

CC=nvcc
EXEC=MatMul

all: $(EXEC)
MatMul: MatMulGPU_ms.o MatMulCPU.o MatMulGPU.o
      $(CC) -o MatMul MatMulCPU.o MatMulGPU.o MatMulGPU_ms.o

MatMulCPU.o: MatMulCPU.cu
      $(CC) -c -o MatMulCPU.o MatMulCPU.cu

MatMulGPU.o: MatMulGPU.cu
      $(CC) -c -o MatMulGPU.o MatMulGPU.cu

MatMulGPU_ms.o: MatMulGPU_ms.cu
      $(CC) -c -o MatMulGPU_ms.o MatMulGPU_ms.cu

clean:
      rm -rf *.o

mrproper: clean
      rm -rf MatMul