`

嵌入式Linux(二)---Makefile常用函数

 
阅读更多

一、字符串处理函数

1.$(substFROM,TO,TEXT)
函数名称:字符串替换函数—subst
函数功能:把字串“TEXT”中的“FROM”字符替换为“TO”
返回值:替换后的新字符串。

2.$(patsubstPATTERN,REPLACEMENT,TEXT)
函数名称:模式替换函数—patsubst
函数功能:搜索“TEXT”中以空格分开的单词,将否符合模式“TATTERN”替换为“REPLACEMENT”。参数“PATTERN”中可以使用模式通配符“%”来代表一个单词中的若干字符。
返回值:替换后的新字符串。
函数说明:参数“TEXT”单词之间的多个空格在处理时被合并为一个空格,但前导和结尾空格忽略。

3.$(stripSTRINT)
函数名称:去空格函数—strip
函数功能:去掉字串(若干单词,使用若干空字符分割)“STRINT”开头和结尾的空字符,并将其中多个连续空字符合并为一个空字符。
返回值:无前导和结尾空字符、使用单一空格分割的多单词字符串。
函数说明:空字符包括空格、[Tab]等不可显示字符。

4.$(findstringFIND,IN)
函数名称:查找字符串函数—findstring
函数功能:搜索字串“IN”,查找“FIND”字串。
返回值:如果在“IN”之中存在“FIND”,则返回“FIND”,否则返回空。
函数说明:字串“IN”之中可以包含空格、[Tab]。搜索需要是严格的文本匹配。

5.$(filterPATTERN…,TEXT)
函数名称:过滤函数—filter
函数功能:过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词,保留所有符合此模式的单词。可以使用多个模式。模式中一般需要包含模式字符“%”。存在多个模式时,模式表达式之间使用空格分割。
返回值:空格分割的“TEXT”字串中所有符合模式“PATTERN”的字串。
函数说明:“filter”函数可以用来去除一个变量中的某些字符串,我们下边的例子中就是用到了此函数。

6.$(filter-outPATTERN...,TEXT)
函数名称:反过滤函数—filter-out
函数功能:和“filter”函数实现的功能相反。过滤掉字串“TEXT”中所有符合模式“PATTERN”的单词,保留所有不符合此模式的单词。可以有多个模式。存在多个模式时,模式表达式之间使用空格分割。
返回值:空格分割的“TEXT”字串中所有不符合模式“PATTERN”的字串。
函数说明:“filter-out”函数也可以用来去除一个变量中的某些字符串,(实现和“filter”函数相反)。

7.$(sortLIST)
函数名称:排序函数—sort
函数功能:给字串“LIST”中的单词以首字母为准进行排序(升序),并取掉重复的单词
返回值:空格分割的没有重复单词的字串。
函数说明:两个功能,排序和去字串中的重复单词。可以单独使用其中一个功能。

8.$(wordN,TEXT)
函数名称:取单词函数—word
函数功能:取字串“TEXT”中第“N”个单词(“N”的值从1开始)。
返回值:返回字串“TEXT”中第“N”个单词。
函数说明:如果“N”值大于字串“TEXT”中单词的数目,返回空字符串。如果“N”0,出错!

9.$(wordlistS,E,TEXT)
函数名称:取字串函数—wordlist
函数功能:从字串“TEXT”中取出从“S”开始到“E”的单词串。“S”“E”表示单词在字串中位置的数字。
返回值:字串“TEXT”中从第“S”“E”(包括“E”)的单词字串。
函数说明:“S”“E”都是从1开始的数字。
“S”“TEXT”中的字数大时,返回空。如果“E”大于“TEXT”字数,返回从“S”开始,到“TEXT”结束的单词串。如果“S”大于“E”,返回空。

10.$(wordsTEXT)
函数名称:统计单词数目函数—words
函数功能:字算字串“TEXT”中单词的数目。
返回值:“TEXT”字串中的单词数。

11.$(firstwordNAMES…)
函数名称:取首单词函数—firstword
函数功能:取字串“NAMES…”中的第一个单词。
返回值:字串“NAMES…”的第一个单词。
函数说明:“NAMES”被认为是使用空格分割的多个单词(名字)的序列。函数忽略“NAMES…”中除第一个单词以外的所有的单词。

二、文件名处理函数

1.$(dirNAMES…)
函数名称:取目录函数—dir
函数功能:从文件名序列“NAMES…”中取出各个文件名目录部分。文件名的目录部分就是包含在文件名中的最后一个斜线(“/”)(包括斜线)之前的部分。
返回值:空格分割的文件名序列“NAMES…”中每一个文件的目录部分。
函数说明:如果文件名中没有斜线,认为此文件为当前目录(“./”)下的文件。

2.$(notdirNAMES…)
函数名称:取文件名函数——notdir
函数功能:从文件名序列“NAMES…”中取出非目录部分。目录部分是指最后一个斜线(“/”)(包括斜线)之前的部分。删除所有文件名中的目录部分,只保留非目录部分
返回值:文件名序列“NAMES…”中每一个文件的非目录部分。

3.$(suffixNAMES…)
函数名称:取后缀函数—suffix
函数功能:从文件名序列“NAMES…”中取出各个文件名的后缀。后缀是文件名中最后一个以点“.”开始的(包含点号)部分,如果文件名中不包含一个点号,则为空。
返回值:以空格分割的文件名序列“NAMES…”中每一个文件的后缀序列。
函数说明:“NAMES…”是多个文件名时,返回值是多个以空格分割的单词序列。如果文件名没有后缀部分,则返回空。

4.$(basenameNAMES…)
函数名称:取前缀函数—basename
函数功能:从文件名序列“NAMES…”中取出各个文件名的前缀部分(点号之前的部分)返回值:空格分割的文件名序列“NAMES…”中各个文件的前缀序列。如果文件没有前缀,则返回空字串。
函数说明:如果“NAMES…”中包含没有后缀的文件名,此文件名不改变。如果一个文件名中存在多个点号,则返回值为此文件名的最后一个点号之前的文件名部分。

5.$(addsuffixSUFFIX,NAMES…)
函数名称:加后缀函数—addsuffix
函数功能:为“NAMES…”中的每一个文件名添加后缀“SUFFIX”。参数“NAMES…”为空格分割的文件名序列,将“SUFFIX”追加到此序列的每一个文件名的末尾。
返回值:以单空格分割的添加了后缀“SUFFIX”的文件名序列。

6.$(addprefixPREFIX,NAMES…)
函数名称:加前缀函数—addprefix
函数功能:为“NAMES…”中的每一个文件名添加前缀“PREFIX”。参数“NAMES…”是空格分割的文件名序列,将“SUFFIX”添加到此序列的每一个文件名之前。
返回值:以单空格分割的添加了前缀“PREFIX”的文件名序列。

7.$(joinLIST1,LIST2)
函数名称:单词连接函数——join
函数功能:将字串“LIST1”和字串“LIST2”各单词进行对应连接。就是将“LIST2”中的第一个单词追加“LIST1”第一个单词字后合并为一个单词;将“LIST2”中的第二个单词追加到“LIST1”的第二个单词之后并合并为一个单词,……依次列推。
返回值:单空格分割的合并后的字(文件名)序列。
函数说明:如果“LIST1”“LIST2”中的字数目不一致时,两者中多余部分将被作为返回序列的一部分。

8.$(wildcardPATTERN)
函数名称:获取匹配模式文件名函数—wildcard
函数功能:列出当前目录下所有符合模式“PATTERN”格式的文件名。
返回值:空格分割的、存在当前目录下的所有符合模式“PATTERN”的文件名。
函数说明:“PATTERN”使用shell可识别的通配符,包括“?”(单字符)、“*”(多字符)等。

三、其它函数

1.$(foreachVAR,LIST,TEXT)
函数功能:函数“foreach”不同于其它函数。它是一个循环函数。类似于Linuxshell中的循环(for语句)。这个函数的工作过程是这样的:如果必要(存在变量或者函数的引用),首先展开变量“VAR”“LIST”;而表达式“TEXT”中的变量引用不被展开。执行时把“LIST”中使用空格分割的单词依次取出赋值给变量“VAR”,然后执行“TEXT”表达式。重复直到“LIST”的最后一个单词(为空时结束)。“TEXT”中的变量或者函数引用在执行时才被展开,因此如果在“TEXT”中存在对“VAR”的引用,那么“VAR”的值在每一次展开式将会到的不同的值。
返回值:空格分割的多次表达式“TEXT”的计算的结果。

2.$(ifCONDITION,THEN-PART[,ELSE-PART])
函数功能:函数“if”提供了一个在函数上下文中实现条件判断的功能。就像make所支持的条件语句—ifeq。第一个参数“CONDITION”,在函数执行时忽略其前导和结尾空字符并展开。“CONDITION”的展开结果非空,则条件为真,就将第二个参数“THEN_PATR”作为函数的计算表达式,函数的返回值就是第二表达式的计算结果;“CONDITION”的展开结果为空,将第三个参数“ELSE-PART”作为函数的表达式,返回结果为第三个表达式的计算结果。
返回值:根据条件决定函数的返回值是第一个或者第二个参数表达式的计算结果。当不存在第三个参数“ELSE-PART”,并且“CONDITION”展开为空,函数返回空。
函数说明:函数的条件表达式“CONDITION”决定了,函数的返回值只能是“THEN-PART”或者“ELSE-PART”两个之一的计算结果。

3.$(originVARIABLE)
函数功能:函数“origin”查询参数“VARIABLE”(通常是一个变量名)的出处。
函数说明:“VARIABLE”是一个变量名而不是一个变量的引用。因此通常它不包含“$”(当然,计算的变量名例外)。
返回值:返回“VARIABLE”的定义方式。用字符串表示。
.undefined变量“VARIABLE”没有被定义。
.default变量“VARIABLE”是一个默认定义(内嵌变量)。如“CC”“MAKE”“RM”等变量。如果在Makefile中重新定义这些变量,函数返回值将相应发生变化。
.environment变量“VARIABLE”是一个系统环境变量,并且make没有使用命令行选项“-e”Makefile中不存在同名的变量定义,此变量没有被替代)。
.environmentoverride变量“VARIABLE”是一个系统环境变量,并且make使用了命令行选项“-e”Makefile中存在一个同名的变量定义,使用“make-e”时环境变量值替代了文件中的变量定义。
.file变量“VARIABLE”在某一个makefile文件中定义。
.commandline变量“VARIABLE”在命令行中定义。
.override变量“VARIABLE”makefile文件中定义并使用“override”指示符声明。
.automatic变量“VARIABLE”是自动化变量。

7.$(shellcommandarguments)
函数功能:函数“shell”所实现的功能和shell中的引用(``)相同。实现了命令的扩展。意味着需要一个shell命令作为它的参数,而返回的结果是此命令在shell中的执行结果。make仅仅对它的回返结果进行处理;make将函数的返回结果中的所有换行符(“\n”)或者一对“\n\r”替换为单空格;并去掉末尾的回车符号(“\n”)或者“\n\r”。函数展开式时,它所调用的命令(它的参数)得到执行。除了对它的引用出现在规则的命令行中和递归的变量定义引用以外,其它决大多数情况下,make在读取Makefile时函数shell就被扩展。
返回值:函数“shell”的参数在shell中的执行结果。
函数说明:函数本身的返回值是其参数的执行结果,没有进行任何处理。对结果的处理是由make进行的。当对函数的引用出现在规则的命令行中,命令行在执行时函数引用才被展开。展开过程函数参数的执行时在另外一个shell进程中完成的,因此对于出现在规则命令行的多级“shell”函数引用需要谨慎处理,否则会影响效率(每一级的“shell”函数的参数都会有各自的shell进程)。


分享到:
评论

相关推荐

    深入浅出嵌入式Linux应用程序开发MP4视频.zip

    深入浅出嵌入式Linux应用程序开发MP4视频. 嵌入式系统概述。 Linux系统体验。 shell编程基础-变量详解。 shell编程基础-语句详解。 shell编程基础-函数详解。 shell编程实例分析。 linux应用程序设计基础-GCC编译器...

    嵌入式Linux C编程入门(第2版) PPT

    第5章 嵌入式linux c语言基础——控制语句及函数 138 5.1 嵌入式linux c语言程序结构概述 138 5.1.1 嵌入式linux c语言3种程序结构 138 5.1.2 嵌入式linux c语言基本语句 139 5.2 选择语句 142 5.2.1...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第二部分

    实验2.1 嵌入式Linux开发环境的建立14 2.2 Linux C程序设计17 2.2.1 C程序设计概述17 2.2.2 Makefile介绍17 2.2.3 Makefile中的变量18 2.2.4 Makefile隐含规则19 实验2.2 Makefile与helloworld19 2.3 Linux多...

    嵌入式Linux程序设计案例与实验教程-实例代码

    实验2.1 嵌入式Linux开发环境的建立14 2.2 Linux C程序设计17 2.2.1 C程序设计概述17 2.2.2 Makefile介绍17 2.2.3 Makefile中的变量18 2.2.4 Makefile隐含规则19 实验2.2 Makefile与helloworld19 2.3 ...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第三部分

    实验2.1 嵌入式Linux开发环境的建立14 2.2 Linux C程序设计17 2.2.1 C程序设计概述17 2.2.2 Makefile介绍17 2.2.3 Makefile中的变量18 2.2.4 Makefile隐含规则19 实验2.2 Makefile与helloworld19 2.3 Linux多...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第一部分

    实验2.1 嵌入式Linux开发环境的建立14 2.2 Linux C程序设计17 2.2.1 C程序设计概述17 2.2.2 Makefile介绍17 2.2.3 Makefile中的变量18 2.2.4 Makefile隐含规则19 实验2.2 Makefile与helloworld19 2.3 Linux多...

    嵌入式设计及linux驱动开发指南——基于ARM9处理器.pdf

    3.1 嵌入式Linux的开发环境 3.2 Cygwin 3.3 虚拟机 3.4 交叉编译的预备知识 3.4.1 Make命令和Makefile文件 3.4.2 binutils工具包 3.4.3 gcc编译器 3.4.4 Glibc库 3.4.5 GDB 3.5 交叉编译 3.5.1 创建编译...

    Linux嵌入式开发+C语言+Makefile+网络编程+驱动开发+系统移植

    这份思维导图文档涵盖了Linux嵌入式开发、C语言、Makefile、网络编程、驱动开发和系统移植等多个领域的知识,可以说是一个非常完整的学习框架。 这份文档将是一份非常有用的参考。其中,Linux嵌入式开发部分介绍了...

    嵌入式Linux系统移植步步通

    第二部分 系统启动bootloader的编写(ADS).................................................................................14 1 工具介绍.......................................................................

    实验五、嵌入式Linux驱动编程实验

    一、实验目的 编写简单的虚拟硬件驱动程序并进行调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。 二、实验基本要求 ...3. 编写加载驱动程序到Ubuntu系统或嵌入式实验箱的Makefile文件。

    嵌入式系统开发基础——基于ARM微处理器和Linux操作系统[滕英岩][习题解答]

    嵌入式系统开发基础——基于ARM微处理器和Linux操作系统[滕英岩][习题解答] 目录第1章 嵌入式系统基础知识 1.1 嵌入式系统的特点及分类 1.1.1 嵌入式系统的特点 1.1.2 嵌入式系统的分类 1.2 嵌入式系统的软硬件...

    嵌入式课件

    11.1.3嵌入式Linux的交叉开发工具链 11.2 桌面Linux的安装 11.2.1双操作系统环境 11.2.2 Cygwin模拟环境 11.2.3 VMware虚拟机环境 11.3 Linux的使用 11.3.1 Linux基本命令 11.3.2 vi编辑器的使用 11.3.3 gcc编译器 ...

    基于ARM-linux的简易电子相册c源码+项目说明(课程设计).zip

    实现原理: 将要播放的图片存储在二维数组中,在线程中循环读取图片的内容,并写入到开发板的屏幕。在主线程中,循环读取来自触摸屏的事件,通过点击或者滑动屏幕,可实现左右翻页,同时短暂终止循环播放,5s内触摸屏...

    LINUX系统开发技术详解---基于ARM

    3.1 Linux 常用工具.............................................................................................................. 28 3.1.1 Shell简介........................................................

    Linux C程序设计大全

    1.2.6 Linux在嵌入式系统方面的发展 1.2.7 Linux在桌面系统方面的发展 1.3 Linux环境下的其他编程语言 1.3.1 C++ 1.3.2 Java 1.3.3 Perl 1.3.4 Python 1.3.5 Ruby 1.3.6 PHP 第2章 控制结构 2.1 goto语句 2.1.1 ...

    Makefile详解

    一本介绍Makefile内部的格式,语法及函数,变量,库操作的中文文档。特别适合嵌入式开发者或者从事linux移植的人员

    宋劲彬的嵌入式C语言一站式编程

    5. 常用的make命令行选项 23. 指针 1. 指针的基本概念 2. 指针类型的参数和返回值 3. 指针与数组 4. 指针与const限定符 5. 指针与结构体 6. 指向指针的指针与指针数组 7. 指向数组的指针与多维数组 8. 函数类型和...

    嵌入式高级C语言编程讲义文档

    第 1 章 Linux 基础之命令 第 2 章 c 数据类型及语句 第 3 章 数组 第 4 章 函数 第 5 章 预处理、动态库、静态库 第 6 章 指针 第 7 章 动态内存申请 第 8 章 字符串处理函数 第 9 章 结构体 第 10 章 ...

    linux内核 0.11版本源码 带中文注释

    // 嵌入式汇编函数程序。 #include <linux/head.h> // head 头文件,定义了段描述符的简单结构,和几个选择符常量。 #include <asm/system.h> // 系统头文件。以宏的形式定义了许多有关设置或修改 // 描述符/...

Global site tag (gtag.js) - Google Analytics