函数的调用语法
$(函数名 参数集合)
${函数名 参数集合}
函数名和参数之间用空格隔开,参数之间用, 符号
字符串处理函数
字符串替换函数,把text中的from字符替换成to,返回被替换后的字符串
模式字符换替换函数,查找text中的单词(以空格、Tab、回车、换行分隔)是否符合模式pattern,如果匹配则以replacement替换。pattern可以包括通配符%,表示任意长度的字符串。如果replacement包含%,那么pattern中的哪个%所代表的字符串。返回被替换后的字符串
去掉空格函数,去掉字符串开头和结尾的空格,返回被去掉空格的字符串值
查找字符串函数,在字符串in中查找find字符串,如果找到,返回find,否则返回空字符串
过滤函数,以pattern模式过滤text中的单词,保留符合模式pattern的单词,可以有多个模式。返回符合模式pattern的字符串
反过滤函数,以pattern模式过滤text中的单词,去除符合模式pattern的单词,可以有多个模式。返回不符合模式pattern的字符串
排序函数,给字符串list中的单词排序(升序),返回排序后的字符串(去除相同的)
取胆此函数,取字符串text中第n个单词(从1开始),返回text中第n个单词。如果n比text中的单词数要大,返回空字符串。
取单词串函数,从字符串text中取从s到e的单词穿(se为数字)返回字符串text从s到e的单词串,如果s大于text的单词数,但会空字符串,e大于返回text到结束的但此字符串。
单词个数统计函数,统计text中字符串中单词个数
首单词函数,取字符串text中的第一个单词
文件名操作函数
获取目录函数
获取文件函数,返回文件名序列names的非目录部分
取后缀函数,从文件名序列names中取出各个文件名的后缀
取前缀函数,从文件名序列names中去除各个文件名的前缀部分
加后缀名函数,把后缀suffix加到names中的每个单词后面
加前缀函数,把前缀prefix加到names中的每个单词前面
连接函数
foreach()函数
类似于C语言的for循环
$(foreach ,,)
把参数list中的单词逐一取出放到参数var所指定的变量中,然后再执行text所包含的表达式。每次text回返回一个字符串,循环中,text返回的每个字符串以空格分隔。循环结束,text返回的每个字符串组成的真个字符串是返回值。
if()函数
很像GUN的make支持的ifeq,语法:
$(if,,[])
[]可选
call()函数
是唯一一个可以用来创建新的参数化的函数。语法:
$(call ,,,...)
当make执行这个函数时,
origin()函数
不操作变量的值,只是告诉用户这个变量从哪来。
$(origin )
variable是变量名,不是引用。返回值:
值 | 说明 |
undefined | 从来没有定义过 |
default | 默认的定义 |
environment | 环境变量 |
file | 被定义在Makefile中 |
command line | 命令行定义的 |
override | 是被override指示符重新定义的 |
automatic | 命令运行中的自动变量 |
shell()函数
它的参数是操作系统Shell的命令。shell()函数把执行操作系统命令后的输出作为函数返回。
控制make的函数
make提供了一些函数来控制make的运行。
$(error )
$(warning )
error输出错误信息
warning输出警告
make的退出码
有3个退出码
指定Makefile
GUN make寻找默认的Makefile的规则是在当前目录下依次找到3个文件,GUNmakefile、makefile和Makefile。一旦找到,就开始读取这个文件并执行。
make的-f或-file参数
指定目标
一般,make的最终目标是Makefile中的第一个目标,其他目标是这个目标连带出来的。要完成制定目标,只要在make命令后直接跟目标的名字就行。
任何在Makefile中的目标都可被指定成最终目标。但以-或是包含了=的目标除外。
make有一个变量MAKECOMGOALS,这个变量中会存放所指定的终极目标的列表。
make的常用伪目标
目标 | 说明 |
all | 该伪目标是所有目标的目标,功能一般是编译所有的目标 |
clean | 该伪目标的功能是删除所有被make创建的文件 |
install | 该伪目标的功能是安装已编译好的程序,就是把目标执行文件复制到指定的目标中 |
该伪目标的功能就是列出改变过的源文件 | |
tar | 该伪目标的功能是把源程序打包备份 |
dist | 该伪目标功能是创建一个压缩文件,一般是把tar文件压缩成Z文件或gz文件 |
TAGS | 该伪目标的功能是更新所有的目标,以备完整地重编译使用 |
check和test | 这两个为目标一般用来测试Makefile的流程 |
检查规则
make检查参数
参数 | 说明 |
-n --just-print -dry-run -recon |
不执行参数,这些参数值是打印命令(用于调试) |
-t --touch |
把目标文件的时间更新(假编译) |
-q -question |
找目标,找到什么都不做,找不到打印出错信息 |
-W --what-if= --assume-new= --new-file= |
需要指定一个参数,一般是源文件或依赖文件。make将根据规则推到来运行依赖于这个文件的命令。 可以和-n参数一起使用,来查看这个依赖文件发生的规则命令 |
make的参数
GUN make的参数定义,不同的厂商的make的具体参数还得参考各自的文档。
列出几个常用的
参数 | 说明 |
-b -m |
忽略和其他版本make的兼容性 |
-B --always-make |
认为所有目标都需要更新 |
-C --directory= |
指定读取Makefile的目录 |
--debug[= |
输出mkae的调试信息。取值: a输出所有 b简单的 v在b选线级别之上 i输出所有隐含规则 j输出执行规则中命令的详细信息 m熟读make读取Makefile、更新,执行的信息 |
-d | --debug=a |
-e --environment-override |
环境变量的值覆盖定义的变量值 |
-h --help |
显示帮助信息 |
-k --keep-going |
出错也不停止运行 |
-l --just-print --dry-run --recon |
仅输出执行过程的命令序列但不执行 |