Makefile学习记录

主要是用于自己的一个学习记录

ifeq

类比 if(a==b)

strip

去掉开头结尾的空格,将字符串中间连续的的空格合并为1个,例如是“a b c”,变为“a b c”

fliter

过滤函数,$(filter PATTERN…,TEXT)
匹配TEXT中符合PATTERN的字符,PATTERN可能有多个
返回值:TEXT中所有符合PATTERN的字符,若有多个,则用空格分隔。

换号符号

使用 \ 即可换行

call函数

我个人的理解是,call函数可以按照某种模式,来可变的创造变量。
例如下例
test = ( 1 ) (1)(1)(2)
foo = $(call test,a,b),得出来的结果foo就是"a b"。这个test中的1,2就是参数的顺序。foo中的a对应的就是第一个,也就是1,b对应的是2。这个1,2顺序是可变的

eval函数

简单的把eval函数理解为,先把后面的内容解析然后展开来,然后在make的时候再运行一次
firstword:
$(firstword NAMES…)
$(firstword foo bar)
返回值为“foo”

word-colon函数

主要作用是将字符串中的冒号替换为空格,需要注意前面空格的表示.
define word-colon
$(word ( 1 ) , (1),(1),(subst :,( s p a c e ) , (space),(space),(2)))
endef
显然,上面这个函数相关的有三个,word,subst,space
word是用来取字符串中的第几个词

subst函数

其实就是字符替换,上例就是对字符串$(2),把冒号用空格代替
word函数:
$(word n,text)
返回text的第n个单词,n从1开始计算,如果n比text含有的单词总数大,则返回空。

if的使用

makefile中if分为在TARGET外部和TARGET内部,TARGET内部中使用的时候,是作为shell脚本使用的。
TARGET内部使用时,格式为if [ 条件 ]; then 语句1; 语句2; else 语句3; 语句4; fi
这里主要注意[ ] 这两个符号和条件之间需要空格,并且shell环境中的语句需要放在一行,如果太长,可以使用 \ 来进行换行

变量

目标变量,仅在目标文件以及相关的规则的中使用
TARGET: := variable


版权声明:本文为qq757515284原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。