0

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

我的工作是:

.PHONY:全部干净

CXX ?= g++
调试?=“1”

ifeq ($(DEBUG), "1")
    CFLAGS+=-g
万一

BODIES := ExecuteStart GraphNode IdNodeMap IdValuePairCollection IScenarioReader XMLScenarioReader INodeExecute
SRCS := $(添加后缀 .cpp, $(BODIES))
对象 := $(addsuffix .o, $(BODIES))
DEPS := $(添加后缀 .d, $(SRCS))

无依赖 = %.o %.a %.d %.h
展开 = $($(var)) $(var) $(var).d
依赖测试 = $(如果 $(过滤器 $(dependless),$(var)),$(var),$(expand))
依赖 = $(排序 $(foreach var,$(1),$(depend_test)))

默认:全部

包括 $(通配符 *.d)

& = $(过滤掉 %.h %.d,$^)

全部:$(对象)

%.cpp.d: %.cpp
    @echo 为 $ $@' 创建 $@'

干净的:
    rm $(对象) $(DEPS)

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

我有跳过的问题吗?

4

1 回答 1

1

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

全部:$(DEPS)$(对象)

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

于 2012-06-18T19:15:37.703 回答