Я работаю с проектом с использованием flex/bison и пытаюсь скомпилировать его с помощью make. Файлы lex.yy.c, tab.c, tab.h из flex/bison генерируются правильно и помещаются в каталог obj. Однако при попытке скомпилировать файл obj/lex.yy.c есть ошибка, и он не может разрешить включение в файл в каталоге src/frontend. Любые идеи, в которых я ошибаюсь? Makefile и вывод включены ниже.Ошибка Makefile, не могу решить включить
Makefile:
VPATH = src obj src/frontend src/interpreter
SRCS = lex.yy.c C.tab.c symbol_table.c nodes.c print_ast.c interpreter.c main.c
OBJS := $(SRCS:%.c=obj/%.o)
INCLUDES = -Isrc -Iobj -Isrc/frontend -Isrc/interpreter
CPPFLAGS = -Wall
LDFLAGS = -Wall
CC = gcc
LEX = flex
YACC = bison -d -t -v
all: bin/mycc
bin/mycc: $(OBJS)
$(CC) -g $(LDFLAGS) $(INCLUDES) -o [email protected] $^
obj/lex.yy.c: C.flex obj/C.tab.h
$(LEX) -o [email protected] $<
obj/C.tab.c: C.y
$(YACC) -o [email protected] $<
obj/C.tab.h: obj/C.tab.c
@touch [email protected]
obj/%.o: src/%.c
$(CC) -g $(CPPFLAGS) $(INCLUDES) -c $^
clean:
rm $(OBJS) obj/lex.yy.c obj/C.tab.c obj/C.tab.h
depend:
$(CC) -M $(SRCS) > .deps
cat Makefile .deps > makefile
Выход:
bison -d -t -v -o obj/C.tab.c src/frontend/C.y
src/frontend/C.y: conflicts: 4 shift/reduce, 14 reduce/reduce
src/frontend/C.y:248.11-53: warning: rule useless in parser due to conflicts: external_declaration: function_definition
flex -o obj/lex.yy.c src/frontend/C.flex
gcc -Wall -c -o obj/lex.yy.o obj/lex.yy.c
src/frontend/C.flex:13:19: fatal error: token.h: No such file or directory
#include "token.h"
^
compilation terminated.
make: *** [obj/lex.yy.o] Error 1
Как сгибать знать, где искать 'token.h'? –