了解 Makefile 的基本概念

Understand the basic concept of a Makefile

我有以下生成文件,我正在尝试升级,但有一个特定元素我无法理解其含义:

$(OBJDIR)/%.o: %.f Makefile
       @$(F90) $(FFLAGS) $(POPTIONS) -o $@ $<    
%.o:        %.f Makefile
       @make $(OBJDIR)/$@

我知道 $(OBJDIR)/%.o: 是通过使用标志等执行 f90 编译器获得的。 但是为什么我需要%.o规则,@make是什么意思。我是否缺少对 Makefile 工作原理的一般理解?

@make 表示调用 make 但不在输出中回显(@ 符号)。正确的方法是 @${MAKE} 因为 make 可能不会引用正在执行的 make,而 ${MAKE} 会。

在 makefile 中,规则必须创建他们承诺的目标文件(除非目标被标记为 .PHONY)。在这里,%.o 规则承诺构建 %.o,但实际上它所做的是构建 $(OBJDIR)/%.o。这是一个错误的规则。