Моя немедленная реакция состояла в том, что вам нужно действие после правила, которое гласит: homework1: program.tab.o program.lex.o
:
homework1: program.tab.o program.lex.o
${CC} -o $@ program.tab.o program.lex.o ${LDFLAGS}
Однако, поскольку вы также пометили homework1
как .PHONY
, возможно, вы неготов связать программу еще.Но ваша проблема воспроизводится ...
Обычно источник для Lex (или Flex) хранится в файле .l
, а не в файле .lex
, поэтому я изменил make-файл на:
.PHONY: all homework1
CFLAGS= -g -O0 -Wall -Werror -Wno-unused-function
LDFLAGS= -lm
all : homework1
homework1 : program.tab.o program.lex.o
%.o : %.c
gcc -o $@ -c $(CFLAGS) $<
%.lex.c : %.l %.tab.h
flex -o $@ $<
%.tab.c %.tab.h : %.y
bison --verbose -o $@ -d $<
Предупреждающее сообщение исчезает.(Я создал вашу среду с помощью 'touch program.lex program.y
' изначально; затем я переместил program.lex
в program.l
).
Однако я все еще не совсем уверен, что происходит в сломанной версии -но это, вероятно, вращается вокруг неявных правил, как предложено @ Beta.