我有一个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 约翰
答案 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
将确保automake
在bar.y
之前构建foo.l
。
因此,请确保您的扫描仪和解析器使用不同的文件名,并且一切顺利。