lex yacc 和 C 的简单 makefile

liv*_*hak 5 c makefile bison flex-lexer

我正在尝试编译我的程序,它有一个 lex 文件、一个 yacc 文件和几个 C 文件。我在Flex 手册中遇到了这个例子。

我有几个关于这个 makefile 的问题。它没有指定编译器,例如gccmakefile 如何知道如何创建scan.oparse.o和这样的目标myprogram.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
Run Code Online (Sandbox Code Playgroud)

ser*_*lle 5

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

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

编译 C 程序

no 是使用 '$(CC) $(CPPFLAGS) $(CFLAGS) -c' 形式的配方从 nc 自动生成的。

[...]

用于 C 程序的 Yacc

通过使用配方'$(YACC) $(YFLAGS)'运行Yacc,可以从ny 自动生成nc。

C 程序的 Lex

nc 是通过运行 Lex 从 nl 自动生成的。实际配方是'$(LEX) $(LFLAGS)'。

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