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

Hab*_*bie 5 c++ automake autoconf yacc

我在https://github.com/Habbie/autoyacc-problem上发布了一个存储库来演示我的问题。

在 automake 1.11 及以下版本中,AC_PROG_YACC在 configure.ac 和AM_YFLAGS=-dMakefile.am 中使用,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
Run Code Online (Sandbox Code Playgroud)

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

mybin.cc:1:20: error: parser.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

帮助!

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

nid*_*ido 2

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

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

.h.hh:
    cp $< $@
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢从 .hh 文件生成 .h 文件,您可能需要翻转定义,并且根据我不熟悉的自动工具的 lex/yacc 处理的具体情况,您可能需要将生成的文件添加到 BUILT_SOURCES