Bison 带有野牛和flex源的自动工具

Bison 带有野牛和flex源的自动工具,bison,autotools,flex-lexer,Bison,Autotools,Flex Lexer,我有一个C项目,其中包括一个flex和一个bison源文件;flex文件#包括bison生成的tab.h文件 因此,我在configure.AC文件中添加了AC_PROG_LEX和AC_PROG_YACC。但在我运行autotools并尝试创建项目之后,flex生成的.c文件将在bison运行以生成flex.c文件包含的tab.h文件之前进行编译。因此,编译失败 我是一个非常熟悉autotools(和stackoverflow!)的新手——我需要让autotools意识到flex.o对bison

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

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

我是一个非常熟悉autotools(和stackoverflow!)的新手——我需要让autotools意识到flex.o对bison.tab.h的依赖性吗?如果是这样的话,该依赖关系会去哪里?在包含项目源列表的Makefile.am中

短暂性脑缺血发作
John

您需要告诉automake头文件将由您生成,而不是由您提供。将其放入Makefile.am中:

BUILT_SOURCES = tab.h

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

就是

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
将在
foo.l
之前为
automake
构建
bar.y
投保


因此,请确保您的扫描仪和解析器使用不同的文件名,这样您就可以开始了。

您是否遵循了这些步骤?如果你想得到任何有用的帮助,你需要发布
Makefile.am
的相关部分。不,恐怕我没有发现。我还没有消化它,但希望它能提供答案;非常感谢。我也有同样的问题。这个答案并没有说明如何确保野牛必须在flex之前被处决。在我的
Makefile.am
文件中,我有一条规则:
pgfs\u cmplr\u SOURCES=src/lab/pgfs\u cmplr.y src/lab/pgfs\u cmplr.l
builded\u SOURCES=src/lab/pgfs\u cmplr.h
但它不生成任何
*.tab.h
文件,这是
pgfs\u cmplr.l
所要求的,因为它包含了
.h
。我尝试过很多名字,比如:
y.tab.h
pgfs\u cpmlr.tab.h
pgfs\u cpmlr.h
,等等,我也尝试过手动编译(从自动工具中编译)并在那里工作,所以我们可以知道
*.y
*.l
都是正常的,这是自动工具配置问题