make编译笔记(四)

基本函数的使用

函数的调用语法

$(函数名 参数集合)
${函数名 参数集合}

函数名和参数之间用空格隔开,参数之间用, 符号

字符串处理函数

  • $(subst ,,)

字符串替换函数,把text中的from字符替换成to,返回被替换后的字符串

  • $(patsubst ,,)

模式字符换替换函数,查找text中的单词(以空格、Tab、回车、换行分隔)是否符合模式pattern,如果匹配则以replacement替换。pattern可以包括通配符%,表示任意长度的字符串。如果replacement包含%,那么pattern中的哪个%所代表的字符串。返回被替换后的字符串

  • $(strip )

去掉空格函数,去掉字符串开头和结尾的空格,返回被去掉空格的字符串值

  • $(findstring ,)

查找字符串函数,在字符串in中查找find字符串,如果找到,返回find,否则返回空字符串

  • $(filter ,)

过滤函数,以pattern模式过滤text中的单词,保留符合模式pattern的单词,可以有多个模式。返回符合模式pattern的字符串

  • $(filter-out ,)

反过滤函数,以pattern模式过滤text中的单词,去除符合模式pattern的单词,可以有多个模式。返回不符合模式pattern的字符串

  • $(sort )

排序函数,给字符串list中的单词排序(升序),返回排序后的字符串(去除相同的)

  • $(word ,)

取胆此函数,取字符串text中第n个单词(从1开始),返回text中第n个单词。如果n比text中的单词数要大,返回空字符串。

  • $(wordlist ,,)

取单词串函数,从字符串text中取从s到e的单词穿(se为数字)返回字符串text从s到e的单词串,如果s大于text的单词数,但会空字符串,e大于返回text到结束的但此字符串。

  • $(words )

单词个数统计函数,统计text中字符串中单词个数

  • $(firstword foo bar)

首单词函数,取字符串text中的第一个单词

文件名操作函数

  • $(dir )

获取目录函数

  • $(notdir )

获取文件函数,返回文件名序列names的非目录部分

  • $(suffix )

取后缀函数,从文件名序列names中取出各个文件名的后缀

  • $(basename )

取前缀函数,从文件名序列names中去除各个文件名的前缀部分

  • $(addsuffix ,)

加后缀名函数,把后缀suffix加到names中的每个单词后面

  • $(addprefix ,)

加前缀函数,把前缀prefix加到names中的每个单词前面

  • $(join ,)

连接函数

foreach()函数

类似于C语言的for循环

$(foreach ,,)

 把参数list中的单词逐一取出放到参数var所指定的变量中,然后再执行text所包含的表达式。每次text回返回一个字符串,循环中,text返回的每个字符串以空格分隔。循环结束,text返回的每个字符串组成的真个字符串是返回值。

if()函数

很像GUN的make支持的ifeq,语法:

$(if,,[])
[]可选

 call()函数

是唯一一个可以用来创建新的参数化的函数。语法:

$(call ,,,...)

当make执行这个函数时,参数中的变量会被参数依次取代,而expression的返回值就是call()函数的返回值

origin()函数

不操作变量的值,只是告诉用户这个变量从哪来。

$(origin )

variable是变量名,不是引用。返回值:

说明
undefined 从来没有定义过
default 默认的定义
environment 环境变量
file 被定义在Makefile中
command line 命令行定义的
override 是被override指示符重新定义的
automatic 命令运行中的自动变量

shell()函数

它的参数是操作系统Shell的命令。shell()函数把执行操作系统命令后的输出作为函数返回。

控制make的函数

make提供了一些函数来控制make的运行。

$(error )
$(warning )

error输出错误信息

warning输出警告

make的运行

make的退出码

有3个退出码

  • 0:表示成功执行
  • 1:如果make运行时出现错误,返回1
  • 2:如果使用了make的-q选项,并且make使得一些目标不需要更新,返回2

指定Makefile

GUN make寻找默认的Makefile的规则是在当前目录下依次找到3个文件,GUNmakefile、makefile和Makefile。一旦找到,就开始读取这个文件并执行。

make的-f或-file参数

指定目标

一般,make的最终目标是Makefile中的第一个目标,其他目标是这个目标连带出来的。要完成制定目标,只要在make命令后直接跟目标的名字就行。

任何在Makefile中的目标都可被指定成最终目标。但以-或是包含了=的目标除外。

make有一个变量MAKECOMGOALS,这个变量中会存放所指定的终极目标的列表。

make的常用伪目标

目标 说明
all 该伪目标是所有目标的目标,功能一般是编译所有的目标
clean 该伪目标的功能是删除所有被make创建的文件
install 该伪目标的功能是安装已编译好的程序,就是把目标执行文件复制到指定的目标中
print 该伪目标的功能就是列出改变过的源文件
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

仅输出执行过程的命令序列但不执行

你可能感兴趣的:(linux,笔记)