【发布时间】:2013-04-19 06:24:49
【问题描述】:
我已经在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++。
【问题讨论】:
-
阅读 1.11 文档,根本没有提到标题:yacc 源文件的扩展名用于确定生成的 C 或 C++ 文件的扩展名。扩展名为 .y 的文件将转换为 .c 文件;同样,.yy 将变为 .cc; .y++,C++; .yxx,.cxx;和.ypp、.cpp。当前文档 (gnu.org/software/automake/manual/html_node/Yacc-and-Lex.html) 这样做:扩展名为 .y 的文件将因此转换为 .c 源和 .h 标头;同样,.yy 将变为 .cc 和 .hh[...]。因此,您使用的是未记录的行为→不是错误;)
-
不是说这是一个错误 - 说它不方便。 “不是错误”也不能解决我的问题:)
标签: c++ yacc autoconf automake