如何在隐式makefile规则中排除几个文件?

如何在隐式makefile规则中排除几个文件?,makefile,gnu-make,Makefile,Gnu Make,我正在构建几个“主”文件,目前有以下隐式规则: $(PROJECT_ROOT)build/%.bin: $(PROJECT_ROOT)obj/%.o $(DEPS) @mkdir -p $(dir $@) @g++ -o $@ $^ 现在我需要有一些“主”文件的特殊链接说明。我对例外情况的定义如下: SPECIAL_TARGET_1 = $(PROJECT_ROOT)build/... SPECIAL_TARGET_2 = $(PROJECT_ROOT)build/... SP

我正在构建几个“主”文件,目前有以下隐式规则:

$(PROJECT_ROOT)build/%.bin: $(PROJECT_ROOT)obj/%.o $(DEPS)
    @mkdir -p $(dir $@)
    @g++ -o $@ $^
现在我需要有一些“主”文件的特殊链接说明。我对例外情况的定义如下:

SPECIAL_TARGET_1 = $(PROJECT_ROOT)build/...
SPECIAL_TARGET_2 = $(PROJECT_ROOT)build/...
SPECIAL_TARGETS = $(SPECIAL_TARGET_1) $(SPECIAL_TARGET_2)
$(filter-out $(SPECIAL_TARGETS), $(PROJECT_ROOT)build/%.bin): $(PROJECT_ROOT)obj/%.o $(DEPS)
    @mkdir -p $(dir $@)
    @g++ -o $@ $^
并尝试按如下方式过滤掉它们:

SPECIAL_TARGET_1 = $(PROJECT_ROOT)build/...
SPECIAL_TARGET_2 = $(PROJECT_ROOT)build/...
SPECIAL_TARGETS = $(SPECIAL_TARGET_1) $(SPECIAL_TARGET_2)
$(filter-out $(SPECIAL_TARGETS), $(PROJECT_ROOT)build/%.bin): $(PROJECT_ROOT)obj/%.o $(DEPS)
    @mkdir -p $(dir $@)
    @g++ -o $@ $^
但是,
过滤掉
并没有过滤任何东西


从隐式规则中排除一些文件的正确方法是什么?

使用
过滤功能从列表中删除内容。但是您没有列表:您只有单个文本字符串
$(PROJECT\u ROOT)build/%.bin

如果要添加新规则:

$(SPECIAL_TARGETS):
    @echo TODO I need to write some special linking instructions for $@
然后,此特定规则将覆盖通用模式匹配规则