这是我的生成文件:
.PHONY: all homework1
CFLAGS= -g -O0 -Wall -Werror -Wno-unused-function
LDFLAGS= -lm
all : homework1
homework1 : program.tab.o program.lex.o
%.o : %.c
gcc -o$@ -c $(CFLAGS) $<
%.lex.c : %.lex %.tab.h
flex -o$@ $<
%.tab.c %.tab.h : %.y
bison --verbose -o$@ -d $<
每当我尝试编译时,我都会收到警告 make: Circular program.lex <- program.lex.o dependency dropped.
我不明白 program.lex
依赖于 program.lex.o
在所有的生成文件中。我看到依赖关系树大约有 4 层深,但它看起来不是圆形的。
如何改进我的 makefile?
最佳答案
问题在于 Make 中有一个隐式规则(好吧,无论如何在 GNUMake 中)用于链接单个目标文件以构建可执行文件。您的 makefile 没有说明如何构建 program.lex
,因此 Make 依赖隐式规则从 program.lex.o
构建它。
由于您的布局似乎依赖于以 program.lex
开头,因此您可以通过为 program.lex
添加自己的规则来抑制隐式规则(什么都不做):
program.lex:;
关于c - Makefile 循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3674019/