了解 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
。这是一个错误的规则。
我有以下生成文件,我正在尝试升级,但有一个特定元素我无法理解其含义:
$(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
。这是一个错误的规则。