makefile - 如何在隐式生成文件规则中排除一些文件?
问题描述
我正在构建几个“主要”文件,目前有以下隐含规则:
$(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 $@ $^
但filter-out
没有过滤任何东西。
从隐式规则中排除几个文件的正确方法是什么?
解决方案
该filter-out
函数用于从列表中删除事物。但是您没有列表:您只有一个文本字符串$(PROJECT_ROOT)build/%.bin
。
如果要添加新规则:
$(SPECIAL_TARGETS):
@echo TODO I need to write some special linking instructions for $@
那么这个特定规则将覆盖通用模式匹配规则。
推荐阅读
- reactjs - React:找不到模块:无法解析“react-html-parser”
- agda - 我可以使用值的正常形式来避免 Agda 中的不完整模式匹配吗?
- function - 对列表进行切片,就好像它具有环形缓冲区的行为一样
- ajax - Ajax 到数据库安全吗?
- c# - 将两个字典的值转换为 DateTime
- r - 关于在 R 中重新编码分类变量的问题
- python - Scrapy,Twisted 严重错误:ImportError: DLL load failed
- jdbc - 可以很好地处理经常空闲的连接的 JDBC 连接池库?
- php - 如何在 JSON 中查找值并取消设置?
- r - 从R中的文件路径中提取TOP目录