Makefile 知识点总结

目前不了解C

1.重大的三个组成部分

target :…….prerequisites….

command

target:需要操作的目标文件

prerequisite:生成target所需要的文件

command: make 的操作指令

书写规则也必须按照上面三个组成部分来写

makefile 中包含什么

显示规则,隐式规则,变量定义,文件指示和注释五个部分

变量定义相当于宏定义,文件指示相当于引用 include,注释需要使用“#”字符号

makefile 中的通配符有三种:“*”,“?”,“[…]”

静态模式需要特别关注,可以节省许多重复的工作

变量的使用

如果你要使用真实的“$”字符, 那么你需要用“$$”来表明

变量的赋值 “=”,“:=”,两者之间有一些区别,最好是“:=”,不会造成递归的问题。

有个有意思的操作符 “?=” , (a)?= (b). 如果a没有定义过,a 的值就是b。

“+=” 追加操作符 override指示符

2.语法知识

2.1条件表达式

ifeq (<arg1> , <arg2> ) 判断两者是否相等,一样为真

ifneq (<arg1> , <arg2> ) 判断两者是否相等,不同为真

ifdef <variable-name> 变量值非空为真

ifndef <variable-name> 变量值空为真

2.2 函数 $(<function>,<arguments>)

$(subst <from>,<to>,<text> ) 把字串中的字符串替换。

$(patsubst <pattern>,<replacement>,<text> ) 模式字符串替换函数

$(strip <string>) 去掉字串中开头和结尾的空字符

$(findstring <find>,<in> ) 在字串中查找字串

$(filter<pattern..>, <list> ) 以模式过滤字符串中的单词,保留符合模式的单词。可以有多个模式。

$(filter-out <pattern..>, <list>) 以模式过滤字符串中的单词,去除符合模式的单词。可以有多个模式

$(sort <list>) 给字符串中的单词排序(升序)

$(word <n>, <text>) 取字符串中第个单词

$(wordlist <s>,<e>,<text> ) 从字符串中取从开始到的单词串。和是一个数字

$(words<text> ) 统计中字符串中的单词个数

$(firstword<text> ) 取字符串中的第一个单词

$(dir<names…> ) 从文件名序列中取出目录部分。目录部分是指最后一个反斜杠(“/”) 之前的部分。如果没有反斜杠,那么返回“./”

$(notdir <names…>) 从文件名序列中取出非目录部分。非目录部分是指最后一个反斜杠(“/ ”)之后的部分

$(suffix<names…> ) 从文件名序列中取出各个文件名的后缀。

$(basename <names…>) 从文件名序列中取出各个文件名的前缀部分

$(addsuffix<suffix>,<names…> ,) 把后缀加到中的每个单词后面

$(addprefix <prefix>,<names…> ) 把前缀加到中的每个单词前面

$(join <list1>, <list2>) 把中的单词对应地加到的单词后面

$(foreach<var> ,<list>,<text> ) 把参数中的单词逐一取出放到参数所指定的变量中, 然后再执行所包含的表达式

$(call <expression>,<parm1>,<parm2>,<parm3>…) call 函数是唯一一个可以用来创建新的参数化的函数

$(origin<variable> ) Origin 函数会以其返回值来告知你这个变量的“出生情况”

2.3 自动化变量

$@ :匹配于 目标中模式定义的集合

$%:仅当目标是函数库文件中,表明规则中的目标成员名

$<:依赖目标中的第一个目标名字

$?:所有比目标新的依赖目标的集合

$^:所有的依赖目标的集合

$+:这个变量很像”$^”,也是所有依赖目标的集合。只是它不去除重复的依赖目标

$*:表明目标模式中”%”及其之前的部分

详细的文档见《跟我一起写Makefile》

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容