c++ - automake 1.12 更改了 bison/yacc 输出名称,向后不兼容的更改?

标签 c++ yacc autoconf automake

我已经在 https://github.com/Habbie/autoyacc-problem 发布了一个存储库来证明我的问题。

在 automake 1.11 及以下版本中,在 configure.ac 中使用 AC_PROG_YACC 并在 Makefile.am 中使用 AM_YFLAGS=-d,parser.yy 会变成 parser.cc 和 parser 。H。使用 automake 1.12,我得到了 parser.cc 和 parser.hh。因为 mybin.cc 有 include "parser.h",这意味着 1.12 破坏了我的构建。

我觉得这是一个向后不兼容的更改,但我觉得应该有一个理智的方法来处理这个问题。

演示:

git clone https://github.com/Habbie/autoyacc-problem.git
cd autoyacc-problem/
autoreconf -i
./configure
make

automake 1.11 的结果:mybin 已构建。 automake 1.12 的结果:

mybin.cc:1:20: error: parser.h: No such file or directory

帮助!

注意:此示例中没有实际的 C++ 代码,但对于我的实际问题,我确实需要 g++。

最佳答案

我不是专家;但是考虑到你是如何依赖于旧版本 automake 中未记录的行为(参见 zhenech),你可以需要一个更新版本的 automake(这样你就可以依赖定义的行为);或者确保预期的文件是由 automake 生成的。

鉴于默认的输出扩展名是“.hh”,您可以使用简单的 make 指令从 .h 文件(对于旧版本的 automake)生成 .hh 文件:

.h.hh:
    cp $< $@

如果您更喜欢从 .hh 文件中生成 .h 文件,您可能希望改变定义,并且根据我熟悉的 autotools 的 lex/yacc 处理的具体情况,您可能希望将生成的文件添加到构建源

关于c++ - automake 1.12 更改了 bison/yacc 输出名称,向后不兼容的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16098509/

相关文章:

c++ - 在 C++ 中使隐式转换运算符优于另一个

c++ - 在 MFC 应用程序中跟踪到控制台

parsing - yacc shift-reduce 用于不明确的 lambda 语法

makefile - 我的库因 libtool 错误而无法构建

c++ - 输入函数时的 SIGSEGV

c++ - 在 C++ 中使用赋值运算符重载将类对象的数据复制到另一个类对象时出错

c - 我们如何定义用于识别给定系列中特定序列的规则?

c++ - 如何编写 bison 文件以自动使用 C 头文件中定义的 token 枚举列表?

c - 编译 GCC Ubuntu : undefined reference to 时出错

Cygwin 和 "failed to run aclocal: No such file or directory"