Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自动生成Yacc输出文件名进退两难_C++_Makefile_Yacc_Bison_Automake - Fatal编程技术网

C++ 自动生成Yacc输出文件名进退两难

C++ 自动生成Yacc输出文件名进退两难,c++,makefile,yacc,bison,automake,C++,Makefile,Yacc,Bison,Automake,问题: 我有一个项目,正在从Solaris/Lex/Yacc移植到Linux/Flex/Bison+Autotools。 我遇到了以下问题,我想知道是否有人知道如何避开它。给定这样的目标(仅包括必要的详细信息): Automake正在从lpp和ypp生成以下源文件: scanner.lpp->scanner.cpp(根据Automake手册) parser.ypp->my_prog-parser.cpp和my_prog-parser.h(为什么?) 尝试的解决方案: 使用bison的-b和-

问题:

我有一个项目,正在从Solaris/Lex/Yacc移植到Linux/Flex/Bison+Autotools。 我遇到了以下问题,我想知道是否有人知道如何避开它。给定这样的目标(仅包括必要的详细信息):

Automake正在从lpp和ypp生成以下源文件:

  • scanner.lpp->scanner.cpp(根据Automake手册)
  • parser.ypp->my_prog-parser.cpp和my_prog-parser.h(为什么?)
尝试的解决方案:

使用bison的-b和-o选项更改输出文件名。问题是,automake似乎采用默认输出名称(parser.tab.c)并使用脚本移动文件。如果我用bison更改输出文件名,当automake试图重命名不存在的文件时,构建将失败


是否有一些选项或我缺少的内容?

解决方案

因此,我花了很多时间阅读automake源代码本身(对于好奇的人,请看handle\u single\u transform函数)。如果为给定源类型指定了每个目标选项,则automake会自动将项目名称前置到任何生成的文件中

因此,改变:

my_prog_YFLAGS=-d

导致automake正确生成规则,导致parser.ypp生成:

  • parser.cpp
  • 解析器.h

不要与体制抗争——你最终会输。请注意:你可以接受自己的答案,这样这个问题看起来就结束了。
my_prog_YFLAGS=-d
AM_YFLAGS=-d