Я получаю файл ошибки makefile (точка) o нет такого файла или каталога.Есть ли способ это исправить? - PullRequest
0 голосов
/ 06 октября 2018

я получаю эту ошибку, когда я пытаюсь скомпилировать C-программу, которую я получаю в teminal:

rm -rf *.o *.gch deq_tester simple_testerv2
gcc -Werror -Wall -g -c simple_testerv2.c deq.h
gcc -Werror -Wall -g -c deq_tester.c deq.h
gcc -Werror -Wall -g -o simple_testerv2 simple_testerv2.o deq.o
gcc: error: deq.o: No such file or directory
makefile:10: recipe for target 'simple_testerv2' failed
make: *** [simple_testerv2] Error 1

вот мой make-файл:

all: simple_testerv2 deq_tester

CC = gcc
CFLAGS = -Werror -Wall -g

deq_tester: deq_tester.o deq.o
   $(CC) $(CFLAGS) -o deq_tester deq_tester.o deq.o

simple_testerv2: simple_testerv2.o deq_tester.o 
   $(CC) $(CFLAGS) -o simple_testerv2 simple_testerv2.o deq.o

deq_tester.o:
   $(CC) $(CFLAGS) -c deq_tester.c deq.h

simple_testerv2.o:
   $(CC) $(CFLAGS) -c simple_testerv2.c deq.h

deq.o:
   $(CC) $(CFLAGS) -c deq.c deq.h

clean:
   rm -rf *.o*.gch deq_tester simple_testerv2

Я поместил свой make-файл втот же каталог с моими файлами c файлами и заголовочными файлами, но каждый раз, когда я компилирую, это выдает мне эту ошибку.Любая помощь будет высоко ценится.

Спасибо

1 Ответ

0 голосов
/ 06 октября 2018

Преобразование комментариев в ответ.

Вы связываете 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, поэтому вам не нужно рассказывать об этой зависимости (хотя это не повредит, если вы добавите зависимость из исходного файла).

...