c - Makefile 循环依赖

标签 c makefile dependencies circular-dependency

这是我的生成文件:

.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/

相关文章:

c - 为什么我的指针在释放后不为空?

c# - 比较并识别特定位置的位置和值并打印

c - 将 fread 与 struct 一起使用时出现奇怪的错误

gcc - 为 gcc 生成依赖项

python - 在 Python 中使用其名称(Python 字符串)获取枚举中的 C 变量值

c++ - 使用 Makefile 对 main 的多个定义

c++ - 如何在QT中使用pro文件重新编译时执行shell命令?

编译错误: Fprintf throws parse error

R - 未导出的函数仍然暴露给用户

.net - .NET中的依赖图