2014-11-25 2 views
0

Хорошо, здесь у меня проблема с моим make-файлом. У меня есть файлы MatMulCpu.cu, MatMulGPU.cu, MatMulGPU_ms.cu Я хочу скомпилировать их и скомпилировать файл MatMul.cu, которому нужны эти три файла. Вот мой Makefile ...Makefile для кода cuda

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. 

Не знаю, что решить ее. Искал несколько мейкфайлы в Интернете, но не могли бы мне помочь:/

EDIT: Ok спасибо теперь я изменил 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, так почему это проблема ...? :/

ответ

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 
+0

Хорошо, теперь я видел мои неудачи;) спасибо! но теперь у меня есть другие ошибки. Я отредактировал первое сообщение, чтобы показать новую версию makefile и ошибки ... Может ли кто-нибудь мне помочь? –

+0

Я изменил свой ответ. Попробуйте добавить ключи '-c' к каждой из целей .o, как это было в моем ответе. Хотя вы не показали свой код, с этим изменением я смог использовать make-файл для создания простого примера, например [this] (http://pastebin.com/xQTaFJ71). Если это не исправить, проблема связана с тем, как структурирован ваш код, и вы не указали свой код. В таком случае я бы предложил опубликовать новый вопрос. –

Смежные вопросы