曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7998|回复: 0
打印 上一主题 下一主题

filter-out -- 反过滤函数

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2010-12-9 18:45:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
格式:
$(filter-out <pattern...>,<text>)
说明:
以 <pattern> 模式过滤 <text> 字符串中的单词,去除符合模式 <pattern> 的单词。返回不符合模式 <pattern> 的字符串。如果 <text> 是 <pattern> 一样或者是其子集,那么返回空。
如:
objs = hello.c world.c are.c you.c ok.c

new = hello.c world.c are.c you.c ok.c add.c
all:
        @echo $(filter-out $(new), $(objs))
运行输出时为空。当 new 改为和 objs 一样时,同样输出为空。当 new 改为hello.c world.c are.c you.c 时,输出 ok.c 。

再做一个实验,如果 new 中包含的字符串比 objs 中的还是少一个 ok.c ,但是字符串的顺序和 ojbs 中的不一样,那结果是不是仍然输出 ok.c 呢?答案是一定的!这一无关顺序的“智能”特性比较重要,像在内核 Makefile 的参数检查中(比较新旧编译选项是否一样)就体现了这一点,如在 script/Kbuild.include 中对arg-check 的定义体现了这一点:
arg-check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \
                    $(filter-out $(cmd_$@),   $(cmd_$(1))) )
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 05:58 , Processed in 0.074060 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表