我在
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包含“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文件,您可能想要转换定义,并且根据我所知道的自动工具的lex / yacc处理的细节,您可能希望将生成的文件添加到BUILT_SOURCES