【问题标题】:simple makefile for lex yacc and C用于 lex yacc 和 C 的简单生成文件
【发布时间】:2015-09-01 22:57:46
【问题描述】:

我正在尝试编译我的程序,它有一个 lex 文件和一个 yacc 文件以及几个 C 文件。我在 the Flex manual 中遇到了这个示例。

我有几个关于这个 makefile 的问题。它没有指定编译器,例如 gcc,makefile 如何知道如何创建目标,例如 scan.oparse.omyprogram.o

     # Makefile example -- scanner and parser.
     # Creates "myprogram" from "scan.l", "parse.y", and "myprogram.c"
     #
     LEX     = flex
     YACC    = bison -y
     YFLAGS  = -d
     objects = scan.o parse.o myprogram.o

     myprogram: $(objects)
     scan.o: scan.l parse.c
     parse.o: parse.y
     myprogram.o: myprogram.c

【问题讨论】:

  • 来自同一页面:'以下 Makefile 没有明确指示 make 如何从 foo.l 构建 foo.c。相反,它依赖于 make 程序的隐含规则来构建中间文件 scan.c:'。不过,为.os 添加明确的规则仍然是一个更好的主意。

标签: c makefile bison flex-lexer


【解决方案1】:

这是一个 Makefile 功能:存在一些隐含规则,并记录在 https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html#Catalogue-of-Rules

在你的情况下,相关部分是

编译 C 程序

n.o 由 n.c 自动生成,配方形式为“$(CC) $(CPPFLAGS) $(CFLAGS) -c”。

[...]

用于 C 程序的 Yacc

n.c 是从 n.y 自动生成的,方法是使用“$(YACC) $(YFLAGS)”运行 Yacc。

C 程序的 Lex

n.c 是通过运行 Lex 从 n.l 自动生成的。实际的配方是“$(LEX) $(LFLAGS)”。

根据https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_12.html,其中一些规则不可移植...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2015-11-09
    相关资源
    最近更新 更多