【问题标题】:Makefile for cuda codecuda 代码的 Makefile
【发布时间】:2014-11-27 23:25:43
【问题描述】:

好的,我的 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 文件还是代码?

似乎还有其他东西,比如据说不止一次定义的主要函数或矩阵定义......但定义不在同一个文件中!例如,我在 MatMulCPU.cu 和 MatMulGPU2.cu 中有一个 Matrix 定义,那为什么会出现问题....? :/

【问题讨论】:

    标签: cuda makefile


    【解决方案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
    

    【讨论】:

    • 好的,现在我已经看到了我的失败;)谢谢!但现在我还有其他错误。我编辑了第一篇文章以显示新版本的 makefile,而不是错误...有人可以帮助我吗?
    • 我已经修改了我的答案。尝试将-c 开关添加到每个.o 目标,就像我在回答中所做的那样。尽管您没有显示您的代码,但通过该更改,我能够使用 makefile 构建一个简单的示例,例如 this。如果这不能解决问题,那么问题与您的代码结构有关,并且您没有显示您的代码。在这种情况下,我建议发布一个新问题。
    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多