gpt4 book ai didi

c - lex yacc 和 C 的简单 makefile

转载 作者:行者123 更新时间:2023-12-05 01:30:06 24 4
gpt4 key购买 nike

我正在尝试编译我的程序,它有一个 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 的一个特性:存在一些隐式规则并记录在 https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html#Catalogue-of-Rules 中。
在你的情况下,相关部分是

Compiling C programs

n.o is made automatically from n.c with a recipe of the form ‘$(CC) $(CPPFLAGS) $(CFLAGS) -c’.


[...]

Yacc for C programs

n.c is made automatically from n.y by running Yacc with the recipe ‘$(YACC) $(YFLAGS)’.

Lex for C programs

n.c is made automatically from n.l by running Lex. The actual recipe is ‘$(LEX) $(LFLAGS)’.


根据 https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_12.html有些规则是不可移植的......

关于c - lex yacc 和 C 的简单 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32342151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com