Makefile自动依赖关系生成(%。o)

时间:2012-06-18 07:10:04

标签: makefile

我想使用此处暂存的自动依赖关系管理技巧制作*。[cpp,h]文件的平面布局:http://locklessinc.com/articles/makefile_tricks/

我的工作是:


.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)

问题是规则%.o:$(调用依赖,%.cpp)不起作用,因此如果我使用--warn-undefined-variables它会警告%.cpp。结果是如何生成* .o文件并且不使用我的规则。

我是否有跳过的问题?

1 个答案:

答案 0 :(得分:1)

我在规则中发现了可怕的错过:

all: $(DEPS) $(OBJECTS)

解决了这个问题。但它需要向所有人添加明确的“生成依赖”规则。