我已经在 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/