subst、foreach、wildcard、notdir这几个函数调用,很像变量的使用,也是以“$”来标识的,其语法为:$( )或${ }。
参数间以逗号分隔,函数名和参数间以空格分隔。函数调用以“$”开头,以圆括号或花括号把函数名和参数括起。

一、subst函数的调用语法
$(subst FROM, TO, TEXT),即将字符串TEXT中的子串FROM变为TO。

举例:

$(subst _defconfig,,$(b)),意思是将字符串$(b)中的_defconfig去掉。

二、foreach函数的调用语法

foreach 函数和别的函数非常的不一样。因为这个函数是用来做循环用的,

Makefile中的foreach函数几乎是仿照于Unix标准Shell (/bin/sh)中的for语句,或是C-Shell(/bin/csh)中的foreach语句而构建的。它的语法是:

$(foreach <var>,<list>,<text>)
这个函数的意思是,把参数<list>;中的单词逐一取出放到参数<var>;所指定的变量中,然后再执行< text>;所包含的表达式。每一次<text>;会返回一个字符串,循环过程中,<text>;的所返回的每个字符串会以空格分隔,最后当整个循环结束时,<text>;所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值。

所以,<var>;最好是一个变量名,<list>;可以是一个表达式,而<text>;中一般会使用<var>;这个参数来依次枚举<list>;中的单词。举个例子:

names := a b c d

files := $(foreach n,$(names),$(n).o)

上面的例子中,$(name)中的单词会被挨个取出,并存到变量“n”中,“$(n).o”每次根据“$(n)”计算出一个值,这些值以空格分隔,最后作为foreach函数的返回,所以,$(files)的值是“a.o b.o c.o d.o”。

注意,foreach中的<var>;参数是一个临时的局部变量,foreach函数执行完后,参数<var>;的变量将不在作用,其作用域只在foreach函数当中。

三、wildcard函数的调用语法

在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。一般我们可以使用“$(wildcard *.c)”来获取工作目录下的所有的.c文件列表。

举例:

假设arch/arm/configs/路径下有三个文件,分别是a_defconfig、b_defconfig、c_defconfig。那么,

boards := $(wildcard arch/arm/configs/*_defconfig)这句话的意思是将$(srctree)/arch/$(SRCARCH)/configs/路径下所有以_defconfig结尾的文件展开成 arch/arm/configs/a_defconfig  arch/arm/configs/b_defconfig  arch/arm/configs/c_defconfig这种方式赋值给boards。这三个文件名以空格隔开,所以,boards的值就是字符串“arch/arm/configs/a_defconfig  arch/arm/configs/b_defconfig  arch/arm/configs/c_defconfig”。

我们注意到:这三个文件的前面都带有路径,怎样去掉路径?下面notdir就派上用场了。

四、notdir函数的调用语法

notdir函数的作用是将参数中的路径去掉。

举例:

了解到boards := $(wildcard arch/arm/configs/*_defconfig这句话的意思后。在此基础上跟上这句话:

boards := $(notdir $(boards)),那么boards的值就变成了“a_defconfig b_defconfig c_defconfig”。

过滤arch/arm/configs/*_defconfig   目录下  “a_defconfig b_defconfig c_defconfig”

makefile ------ subst、foreach、wildcard、notdir相关推荐

  1. 数组的5种遍历(for循环、for...in、for...of、forEach()、map()

    数组:内存中一块连续的存储单元,这些存储单元具有共同的名称,不同的索引(下标). 数组5种遍历: 1.for循环 任何数组都可以使用for循环进行遍历,使用频率最高 for (let i = 0; i ...

  2. Java 方法使用总结(重载、数组输出、enum和switch、foreach和迭代器、可变长度参数、重载中使用可变长度参数)

    方法重载 方法名相同 方法的参数类型,参数个不一样 方法的返回类型可以不相同 方法的修饰符可以不相同 main 方法也可以被重载 class MyClass {int height;MyClass() ...

  3. 数组的属性、foreach遍历、交错数组与矩形数组的区别

    本次课我们要学习数组的属性.foreach的用法.我上节课提到的交错数组,我会通过多个例子的演示讲解让你们理解交错数组定义已经与规则的二维数组(矩形数组)的区别加深理解,下一节我们还将学习数组的常用方 ...

  4. makefile中的foreach、patsubst等函数及自动化变量

    参考链接: Makefile中foreach函数使用方法 Makefile中的$@, $^, $< , $?, $%, $+, $* Makefile之patsubst wildcard ,no ...

  5. 【Java挠头】可变参、foreach、Annotation等特性

    –本文摘要–     1.本文的目标读者:是了解Java基础,想进一步掌握项目中常使用的Java特性的读者.     2.本文的内容摘要:讲述Java中的一些特性,可变参.foreach循环.Anno ...

  6. JavaScript中 for、for in、for of、forEach等使用总结

    在JavaScript中,我们经常需要去循环迭代方法操作数组对象等,常见等循环方法有 for.for in.for of.forEach等. 1.for循环 for循环是最基础常见的一种循环,圆括号中 ...

  7. JAVA SE学习day_11:集合的相关应用、增强型for循环、foreach方法、数组与集合的相互转换

    一.集合的相关应用 1.1 将一个集合加到另一个集合上 boolean addAll(Collection c) 将给定集合中的所有元素添加到当前集合中.调用方法之后只要c1集合发生变化就返回true ...

  8. Smarty中的内建函数(一)config_load、foreach

    1.capture 将模板输出的数据存放到一个变量里,不能嵌套,<{capture name="变量名"}><{/capture}>之间的内容 通过< ...

  9. js map、filter、forEach

    1.map方法 <!DOCTYPE html> <html lang="zh"><head><meta charset="UTF ...

  10. 第九节:深究并行编程Parallel类中的三大方法 (For、ForEach、Invoke)和几大编程模型(SPM、APM、EAP、TAP)

    一. 并行编程 1. 区分串行编程和串行编程 ①. 串行编程:所谓的串行编程就是单线程的作用下,按顺序执行.(典型代表for循环 下面例子从1-100按顺序执行) ②. 并行编程:充分利用多核cpu的 ...

最新文章

  1. Windoes 10 笔记本上安装telnet方法
  2. Windows server 2008文件服务器之二屏蔽影音文件以及指定文件名
  3. html登入弹框插件,基于jQuery的弹出框插件
  4. nginx配置文件+本地测试请求转发到远程服务器+集群
  5. 支付宝支付 - 构建支付表单填并提交
  6. Java中的基本类型和引用类型变量的区别
  7. 【Java】indexOf 方法区分大小写
  8. 【Flink】Flink WindowOperator大概工作流程
  9. 【随感】我觉得,世界上最美好的乐器是钢琴和架子鼓
  10. Oracle学习VII —— Oracle建表
  11. NXP与STM32单片机程序架构
  12. 如何使用Python构建网络抓取工具[分步指南]
  13. java毕业生设计新生报到管理系统计算机源码+系统+mysql+调试部署+lw
  14. mysql 双活_Mysql双活方案
  15. ZeroDivisionError: integer division or modulo by zero
  16. 电脑win10进入设置就闪退卡顿,解决办法:
  17. Java中for循环的用法(亲测)
  18. 华为HCIA Cloud Computing 华为HCIA考证笔记(已获取该证书)
  19. PCB的EMI如何产生
  20. vscode中使用prettier后html,css格式化不生效的问题

热门文章

  1. 关于IEnumeratorT泛型枚举器 和 IEnumerableT
  2. VS2015 经常不出现智能提示,代码颜色也没有了
  3. CountDownLatch和CyclicBarrier 举例详解
  4. 2016计蒜之道复赛 百度地图的实时路况 floyd+cdq分治
  5. JDK_Proxy_InvocationHandler_动态代理
  6. css中的.clearfix是什么意思?
  7. 判断闰年的方法以及如何获得单链表的倒数第K个元素
  8. Jmeter参数化HTTP request中Send Files With The Request的文件路径和文件名
  9. G1手机上的VOIP之旅 - SIP Server + SipDroid
  10. 华三H3C链路聚合配置实例