【问题标题】:Automake Yacc Output Filename QuandaryAutomake Yacc 输出文件名困惑
【发布时间】:2011-07-17 14:23:57
【问题描述】:

问题:

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

bin_PROGRAMS=my_prog

my_prog_YFLAGS=-d
my_prog_SOURCES=\
   main.cpp \
   parser.ypp \
   scanner.lpp

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) 和 move 带有脚本的文件。如果我用 bison 更改输出文件名,当 automake 尝试重命名不存在的文件时,构建会失败。

有什么选择或我缺少的东西吗?

【问题讨论】:

  • 不要与系统抗争——你最终会输。
  • 请注意:您可以接受自己的答案,所以这个问题看起来已经完成了。

标签: c++ makefile yacc bison automake


【解决方案1】:

解决方案

所以我实际上是在阅读 automake 源代码本身(如果好奇,请查看 handle_single_transform 函数)。如果为给定的源类型指定了每个目标的选项,automake 会自动将项目名称添加到任何生成的文件中。

因此,改变:

my_prog_YFLAGS=-d

AM_YFLAGS=-d

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

  • parser.cpp
  • parser.h

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多