如何在隐式 makefile 规则中排除一些文件?
How to exclude a few files in an implicit makefile rule?
我正在构建几个 "main" 文件,目前有以下隐式规则:
$(PROJECT_ROOT)build/%.bin: $(PROJECT_ROOT)obj/%.o $(DEPS)
@mkdir -p $(dir $@)
@g++ -o $@ $^
现在我需要一些 "main" 文件的特殊链接说明。我将异常定义如下:
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 $@ $^
但是 filter-out
没有过滤任何东西。
从隐式规则中排除一些文件的正确方法是什么?
filter-out
函数用于从列表中删除内容。但是您没有列表:您只有单个文本字符串 $(PROJECT_ROOT)build/%.bin
.
如果您要添加新规则:
$(SPECIAL_TARGETS):
@echo TODO I need to write some special linking instructions for $@
那么此特定规则将覆盖通用模式匹配规则。
我正在构建几个 "main" 文件,目前有以下隐式规则:
$(PROJECT_ROOT)build/%.bin: $(PROJECT_ROOT)obj/%.o $(DEPS)
@mkdir -p $(dir $@)
@g++ -o $@ $^
现在我需要一些 "main" 文件的特殊链接说明。我将异常定义如下:
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 $@ $^
但是 filter-out
没有过滤任何东西。
从隐式规则中排除一些文件的正确方法是什么?
filter-out
函数用于从列表中删除内容。但是您没有列表:您只有单个文本字符串 $(PROJECT_ROOT)build/%.bin
.
如果您要添加新规则:
$(SPECIAL_TARGETS):
@echo TODO I need to write some special linking instructions for $@
那么此特定规则将覆盖通用模式匹配规则。