2

我有一个包含 flex 和 bison 源文件的 C 项目;flex 文件#includes 野牛生成的tab.h 文件。

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

我是一个 autotools(和 stackoverflow!)新手——我需要让 autotools 知道 flex .o 对 bison .tab.h 的依赖吗?如果是这样,那么该依赖项将在哪里 - 在包含项目 SOURCES 列表的 Makefile.am 中?

蒂亚约翰

4

2 回答 2

2

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

BUILT_SOURCES = tab.h
于 2013-03-13T23:32:15.790 回答
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

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

于 2018-12-25T08:40:14.383 回答