2013-06-04 2 views
0

Я пытаюсь написать Makefile, но он показывает Make: Don't know how to make cc. Stop.Дать свой собственный Makefile

, что я делаю это: - hello.c

#include<stdio.h> 
extern int print(); 
int main(){ 
print(); 
return 0; 
} 

print.c

#include<stdio.h> 
int print(){ 
printf("hello\n"); 
return 0; 
} 

Makefile

all: OUT 
OUT: cc Hello.o print.o -o OUT 
Hello.o: Hello.c\ 
     cc -c Hello.c 
print.o: print.c \ 
     cc -c print.c 
clean: rm -f *.o 
clobber: rm -f OUT 

, когда я пишу сделать $> сделать Марка: Не знаю, как сделать куб.см. Стоп.

$> make clean Марка: Не знаю, как сделать rm. Стоп.

, что вещь мне не хватает ..

Я новичок с этим делают и Makefile, поэтому, пожалуйста, мне предложить некоторые хорошие учебники по этому

Я изменил к этому: -

all: OUT 

OUT:; @cc Hello.o print.o -o OUT 

Hello.o:; @cc -c Hello.c 

print.o:; @cc -c print.c 

clean:; @rm -f *.o 

clobber:; @rm -f OUT 

с указанием ошибки: -

cc: warning 1913: Hello.o 'не существует или не может быть прочитан cc: warning 1913: print.o' does not exist or cannot be read ld: I/O error, file "Hello.o": No such file or directory Fatal error. *** Error exit code 1

+0

Попробуйте выполнить поиск в Интернете для «makefile tutorial»? –

+0

Если вы пытаетесь использовать 'Hello.o' для сборки' OUT', тогда вы должны указать 'Make', что' Hello.o' является зависимостью. Измените строку на: 'OUT: Hello.o print.o; @cc ... '. Но используйте '\ n \ t' вместо'; 'как разделитель! Соглашения хороши и их следует красить только тогда, когда это необходимо и понятно. –

+0

@WilliamPursell Спасибо :) – avinashse

ответ

4

Правила должны быть на другой линии, чем цели, с отступом с твердой позиции:

all: OUT 
OUT: Hello.o print.o 
     cc Hello.o print.o -o OUT 
Hello.o: Hello.c 
     cc -c Hello.c 
print.o: print.c 
     cc -c print.c 
clean: 
     rm -f *.o 
clobber: 
     rm -f OUT 

Но это можно упростить, опираясь на неявные правила и обобщена, используя некоторые переменные:

all: OUT 
OUT: Hello.o print.o 
     $(CC) $(CFLAGS) $^ -o [email protected] 
clean: 
     rm -f *.o 
clobber: 
     rm -f OUT 
+0

Спасибо за ответ .. но показ 'Make: должен быть разделителем по строке правил 4. Stop.', когда я пытаюсь ваше первое решение – avinashse

+0

Вы должны использовать вкладки как отступы. Если вы используете пробелы, вы получите ошибку, очень похожую на то, что вы получаете. –

+0

теперь показывает: - 'cc: warning 1913:' Hello.o 'не существует или не может быть прочитан cc: warning 1913: 'print.o' не существует или не может быть прочитан ld: ошибка ввода-вывода, файл «Hello.o»: нет такого файла или каталога Неустранимая ошибка. ' – avinashse

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