我有以下要升级的makefile,但是有一个我无法理解含义的元素:
$(OBJDIR)/%.o: %.f Makefile
@$(F90) $(FFLAGS) $(POPTIONS) -o $@ $<
%.o: %.f Makefile
@make $(OBJDIR)/$@
我知道$(OBJDIR)/%.o:
是通过执行带有标志等的f90编译器获得的。
但是为什么我需要%.o
规则,以及@make
是什么意思。我是否缺少对Makefile的工作原理的一般了解?
答案 0 :(得分:2)
@make
表示调用make
,但不在输出(@
符号)中回显。正确的方法是@${MAKE}
,因为make
可能不引用正在执行的make,而${MAKE}
却可以引用。
在makefile文件中,规则必须创建它们承诺的目标文件(除非已将目标文件标记为.PHONY
)。在这里,该%.o
规则承诺将建立%.o
,但实际上它是在构建$(OBJDIR)/%.o
。这是一条违反规则的人。