带有野牛和弹性源的自动工具

时间:2013-01-22 11:12:22

标签: bison autotools flex-lexer

我有一个C项目,其中包含一个flex和一个bison源文件; flex文件#include bison生成的tab.h文件。

所以我已将AC_PROG_LEX和AC_PROG_YACC添加到我的configure.ac文件中。但是在我运行autotools并尝试制作项目之后,在运行 bison之前编译了flex生成的.c文件以生成flex.h包含的tab.h文件。 c文件。因此编译失败。

我非常喜欢autotools(以及stackoverflow!)新手 - 我是否需要让autotools知道对bison .tab.h的flex .o依赖?如果是这样,那依赖性将在Makefile.am中包含项目SOURCES列表?

TIA 约翰

2 个答案:

答案 0 :(得分:2)

您需要告诉automake要构建头文件而不是已经提供。把它放在Makefile.am中:

BUILT_SOURCES = tab.h

答案 1 :(得分:0)

根据我的经验,解析器和扫描器不能使用相同的前缀。

bin_PROGRAM = baz
AM_YFLAGS = -d
BUILT_SOURCES = foo.h
baz_SOURCES = main.c foo.l foo.y

不起作用,但是

bin_PROGRAM = baz
AM_YFLAGS = -d
BUILT_SOURCES = bar.h
baz_SOURCES = main.c foo.l bar.y

将确保automakebar.y之前构建foo.l

因此,请确保您的扫描仪和解析器使用不同的文件名,并且一切顺利。