Makefile自动依赖项生成(%.o)

Makefile自动依赖项生成(%.o),makefile,Makefile,我想使用此处介绍的自动依赖关系管理技巧,对*.[cpp,h]文件进行平面布局: 我的工作是: .PHONY: all clean CXX ?= g++ DEBUG ?= "1" ifeq ($(DEBUG), "1") CFLAGS+=-g endif BODIES := ExecuteStart GraphNode IdNodeMap IdValuePairCollection IScenarioReader XMLScenarioReader INodeExecute SRCS

我想使用此处介绍的自动依赖关系管理技巧,对*.[cpp,h]文件进行平面布局:

我的工作是:

.PHONY: all clean CXX ?= g++ DEBUG ?= "1" ifeq ($(DEBUG), "1") CFLAGS+=-g endif BODIES := ExecuteStart GraphNode IdNodeMap IdValuePairCollection IScenarioReader XMLScenarioReader INodeExecute SRCS := $(addsuffix .cpp, $(BODIES)) OBJECTS := $(addsuffix .o, $(BODIES)) DEPS := $(addsuffix .d, $(SRCS)) dependless = %.o %.a %.d %.h expand = $($(var)) $(var) $(var).d depend_test = $(if $(filter $(dependless),$(var)),$(var),$(expand)) depend = $(sort $(foreach var,$(1),$(depend_test))) default: all include $(wildcard *.d) & = $(filter-out %.h %.d,$^) all: $(OBJECTS) %.cpp.d: %.cpp @echo creating $@ for $ $@' clean: rm $(OBJECTS) $(DEPS) .骗子:都是干净的 CXX?=g++ 调试?=“1” ifeq($(调试),“1”) CFLAGS+=-g 恩迪夫 正文:=ExecuteStart GraphNode IdNodeMap IdValuePairCollection IsCanarioReader XMLScenarioReader INodeExecute SRCS:=$(addsuffix.cpp,$(正文)) 对象:=$(addsuffix.o,$(body)) DEPS:=$(addsuffix.d,$(SRCS)) dependless=%.o%.a%.d%.h 展开=$($(var))$(var)$(var).d dependent_test=$(如果$(filter$(dependless),$(var)),$(var),$(expand)) 依赖=$(排序$(foreach变量,$(1),$(依赖测试))) 默认值:全部 包括$(通配符*.d) &=$(过滤掉%.h%.d,$^) 全部:$(对象) %.cpp.d:%.cpp @echo正在为$$@创建$@ 清洁: rm$(对象)$(部门) 问题是规则%.o:$(调用依赖,%.cpp)不起作用,因此如果我使用--warn未定义变量,它会警告%.cpp。make的结果指出了如何生成*.o文件,而不使用我的规则


我是否有跳过的问题?

我在规则中发现了可怕的失误:

all: $(DEPS) $(OBJECTS) 全部:$(DEPS)$(对象) 这解决了问题。但它需要在所有规则中添加明确的“生成依赖项”规则