Как создать файл Makefile, содержащий мой заголовок?

#c

Вопрос:

Я новичок в программировании на c, и у меня возникли проблемы с созданием файла Makefile для него.

Мне действительно понравилось

  CC = gcc CFLAGS = -fsanitize=address -g -Wall -Wvla  OUTPUT = prac  all: $(OUTPUT)  mymalloc.o: mymalloc.c mymalloc.h  $(CC) $(CFLAGS) -c $@ mymalloc.c  %: %.c  $(CC) $(CFLAGS) -o $@ mymalloc.o $^    

и я пытаюсь создать файл, просто набрав «создать».

Но в нем все время говорится

 gcc -fsanitize=address -g -Wall -Wvla -o prac mymalloc.o prac.c clang: error: no such file or directory: 'mymalloc.o' make: *** [prac] Error 1  

всякий раз , когда я пытаюсь это сделать, я делаю что-то не так?

Спасибо.

Править)

Я все сделал правильно, используя это!

 CC = gcc CFLAGS = -fsanitize=address -g -Wall -Wvla DEPS = mymalloc.h OBJS = prac.o mymalloc.o    %.o: %.c $(DEPS)  $(CC) $(CFLAGS) -c -o $@ $lt;  prac: $(OBJS)  $(CC) $(CFLAGS) -o $@ $^  

Комментарии:

1. Вам также нужна такая зависимость, как: $(OUTPUT): mymalloc.o prac.o

2. @Barmar Тогда, должен ли я создать еще один файл.o и добавить его, чтобы сделать исполняемый файл?

3. Проблема в том , что %: %.c правило запускается для prac , но это правило используется mymalloc.o без зависимости для mymalloc.o . Может быть, прочтите руководство по изготовлению о «сделать зависимым». Или сначала замените правила четкими инструкциями. Может быть, оптимизируем позже.

Ответ №1:

Вам нужно сделать исполняемый файл зависимым от mymalloc.o :

 %: %.c mymalloc.o  $(CC) $(CFLAGS) -o $@ mymalloc.o $^  

Зависимость указывает make , что ей необходимо выполнить правило для создания mymalloc.o .

Кроме того, ваше правило для создания mymalloc.o неверно. Вам нужно -o до $@ :

 mymalloc.o: mymalloc.c mymalloc.h  $(CC) $(CFLAGS) -c -o $@ mymalloc.c  

В противном случае он пытается использовать выходной файл в качестве одного из входных файлов.

Комментарии:

1. Я изменил его на такой, но все равно получил ту же ошибку..

2. Может быть, проверить вывод make -d ... .

3. @RyanLee обновил ответ.

4. Спасибо! Я сделал не совсем то, что вы говорите, но я получил большие знания о правиле зависимости от makefile!