Преобразование комментариев в ответ.
Вы связываете simple_testerv2
с deq.o
, но не говорите make
, что собираетесьСделай так.Добавьте сюда также зависимость deq.o
(и удалите ненужную зависимость от deq_tester.o
).
simple_testerv2: simple_testerv2.o deq.o
$(CC) $(CFLAGS) -o simple_testerv2 simple_testerv2.o deq.o
Подумайте, может ли макрос помочь еще:
PROG2 = simple_testerv2
OBJ2 = simple_testerv2.o deq.o
${PROG2}: ${OBJ2}
${CC} ${CFLAGS} -o $@ ${OBJ2}
Вы можете добавить ${PROG2}
к списку программ, созданных вашей целью all
(при условии, что вы переместите цель all
после определения макроса).
Обратите внимание, что строки компиляции не должны пытаться скомпилировать deq.h
.Файл будет включен при компиляции исходного файла.(Следовательно: измените $(CC) $(CFLAGS) -c deq.c deq.h
на $(CC) $(CFLAGS) -c deq.c
и т. Д.) Действительно, вам вообще не нужно указывать строку компиляции;make
знает, как преобразовать файл .c
в файл .o
.Таким образом, вы можете написать:
deq_tester.o: deq.h
deq.o: deq.h
simple_testerv2.o: deq.h
Это говорит make
, что файлы содержат заголовок (поэтому, если заголовок изменяется, объектные файлы необходимо перекомпилировать).Make
имеет встроенные правила, которые предписывают ему строить xyz.o
из xyz.c
, поэтому вам не нужно рассказывать об этой зависимости (хотя это не повредит, если вы добавите зависимость из исходного файла).