在automake / flex / bison堆栈中使用flex选项的前缀选项

时间:2011-08-17 04:08:07

标签: makefile bison flex-lexer automake

我正在转换构建过程以使用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:我不知道如何从Makefile.am重新创建-P选项。在我的Makefile.am中,我只列出q_parser.l并让automake弄清楚要做什么 - 但它输出q_parser.c而不是q_parser.h。

然后q_parser.y包含q_parser.h,它输出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 - &gt; .c和.y - &gt; .c所以我遇到了gcc试图读取.l - &gt;的错误。 .c输出并自行摔倒。

我需要覆盖automake才能执行.l - &gt; .h然后我应该可以让它开轮。有什么提示吗?

1 个答案:

答案 0 :(得分:2)

你可以绕过所有那些整洁的东西,因为它阻碍了你:

q_parser.h : ../../code/q_parser.l
        $(LEX) $(LFLAGS) $(AM_LFLAGS) -Pq_parser_yy -o$@ $<
q_parser.c : ../../code/q_parser.y q_parser.h
        $(YACC) $(YFLAGS) $< -o $@

似乎POSIX兼容性无论如何都不是你想要的。