关于Makefile编译时死循环问题

2 ifneq ($(EXE),"")
33 all:$(EXE)
34 endif
35
36 ifneq ($(LIBS),"")
37 all:$(LIBS)
38 endif
39
40 ifneq ($(MAKECMDGOALS),clean)
41 -include $(DEPS)
42 endif-
43 $(DIRS):
44 | $(MKDIR) $@
45
46 $(EXE):$(DIR_EXES) $(OBJS)
47 | $(CC) $(filter %.o, $^) -o $@
48 $(LIBS):$(DIR_LIBS) $(OBJS)
49 | $(AR) $(ARFLAGS) $@ $(filter %.o,$^)-
50 $(DIR_OBJS)/%.o:$(DIR_OBJS) %.c
51 | $(CC) -c $(filter %.c, $^) -o $@
52 $(DIR_DEPS)/%.d:$(DIR_DEPS) %.c
53 | @set -e;\
54 | echo "Making $@...";\
55 | $(RM) $(RMFLAGS) $@;\
56 | $(CC) -E -MM $(filter %.c, $^) > $@.tmp;\
57 | sed 's,(.*).o[ :],objs/\1.o $@ :,g' < $@.tmp > $@;\
58 | $(RM) $(RMFLAGS) $@.tmp;-
为什么进行头文件依赖的时候如果不在58行后边添加mv $@ $@的话其会一直循环执行 如果其模式匹配直接为%.d:%.c的话其执行没有问题

[root@localhost src]# make
mkdir deps
Making deps/foo.d...
Making deps/foo.d...
Making deps/foo.d...
Making deps/foo.d...
这位其执行结果

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!