Я конвертирую процесс сборки для использования automake / libtool, и я столкнулся с проблемой для поддержки набора .l / .y.
Исходный процесс сборки выполнялся в два этапа:
flex -t -Pq_parser_yy ../../code/q_parser.l > q_parser.h
bison ../../code/q_parser.y -o q_parser.c
Flex: я не знаю, как воссоздать опцию -P из файла Makefile.am. В моем Makefile.am я просто перечисляю q_parser.l и позволяю automake выяснить, что делать - но он выдает q_parser.c, а не q_parser.h.
q_parser.h затем включается в q_parser.y, который выводит q_parser.c. Очень запутанно для тех, кто никогда не использовал flex / bison!
Итак, как это работает с automake:
.l.c:
$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
q_parser.c: $(db_dir)/q_parser.l
$(am__skiplex) \
$(SHELL) $(YLWRAP) `test -f '$(db_dir)/q_parser.l' || echo '$(srcdir)/'`$(db_dir)/q_parser.l $(LEX_OUTPUT_ROOT).c q_parser.c -- $(LEX) $(LFLAGS) $(AM_LFLAGS)
.y.c:
$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
Таким образом, automake отображает .l -> .c и .y -> .c, поэтому я столкнулся с ошибкой, когда gcc пытается прочитать вывод .l -> .c и падает на себя.
Мне нужно переопределить automake, чтобы выполнить .l -> .h, и тогда я должен быть в порядке, чтобы позволить ему занять колесо. Любые советы?