liv*_*hak 5 c makefile bison flex-lexer
我正在尝试编译我的程序,它有一个 lex 文件、一个 yacc 文件和几个 C 文件。我在Flex 手册中遇到了这个例子。
我有几个关于这个 makefile 的问题。它没有指定编译器,例如gccmakefile 如何知道如何创建scan.o和parse.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)
这是一个 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,其中一些规则不可移植......