A.变量值的替换1.使用指定字符(串)替换变量中的后缀字符(串)2.语法格式:$(var:a=b) (将a替换成b)a.替换表达式中不能有任何的空格b.make中支持使用${}对变量进行取值示例
src:=a.cc b.cc c.cc obj:=$(src:cc=o) test: @echo "obj=>$(obj)"
输出结果由上图可以看出变量值的替换B.变量的模式替换1.使用%保留变量值中的指定字符,替换其它字符2.语法格式:$(var:a%b=x%y)a.替换表达式中不能有任何的空格b.make中支持使用${}对变量进行取值示例
src:=a1b.c a2b.c a3b.c obj:=$(src:a%b.c=x%y) test: @echo "obj=>$(obj)"
输出结果C.变量值的嵌套引用1.一个变量名之中可以包含对其它变量的引用2.嵌套引用的本质是使用一个变量表示另一个变量如图所示D.命令行变量1.运行make时,在命令行定义变量2.命令行变量默认覆盖makefile中定义的变量示例及运行结果E.override关键字1.用于指示makefile中定义的变量不能被覆盖2.变量的定义和赋值需要使用override关键字示例及运行结果F.define关键字1.用于在makefile中定义多行变量2.多行变量的定义从变量名开始到endef结束3.可使用override关键字防止变量被覆盖4.define定义的变量等价于使用=定义的变量示例及运行结果
A.makefile中支持条件判断语句1.可以根据条件的值来决定make的执行2.可以比较两个不同变量或者变量和常量值需要注意的是:条件判断语句只能用于控制make实际执行的语句;但是,不能控制规则中命令的执行过程条件判断的关键字有四种:
注意:1.条件判断语句之前可以有空格,但不能有Tab字符2.在条件语句中不要使用自动变量($^,$<)3.一条完整的条件语句必须位于同一个makefile中4.条件判断类似C语言中的宏,预处理阶段有效,执行阶段无效5.make在加载makefile时(首先计算表达式的值--赋值方式不同,计算方式不同;根据判断语句的表达式决定执行的内容)
A.makefile中支持函数的概念1.make解释器提供了一系列的函数供makefile调用2.在makefile在支持自定义函数实现,并调用执行3.通过define关键字实现自定义函数B.自定义函数的语法深入理解自定义函数1.自定义函数是一个多行变量,无法直接调用2.自定义函数时一种过程调用,没有任何的返回值3.自定义函数用于定义命令集合,并应用于规则中示例及运行结果注意:$(call func2, mylove, dandanxiaohai)对应于func2中的三个参数,通过call进行调用C.make解释器中的预定义函数1.make的函数提供了处理文件名,变量和命令的函数2.可以在需要的地方调用函数来处理指定的参数3.函数在调用的地方被替换为处理结果预定义函数的调用示例及运行结果
.PHONY : test define func1 @echo "My name is $(0)" endef define func2 @echo "My name is $(0)" endef var1 := $(call func1) var2 := $(call func2) var3 := $(abspath ./) var4 := $(abspath test.cpp) test : @echo "var1 => $(var1)" @echo "var2 => $(var2)" @echo "var3 => $(var3)" @echo "var4 => $(var4)"
分析:1.makefile中不支持真正意义上的自定义函数2.自定义函数的本质时多行变量3.预定义的call函数在调用时将参数传递给多行变量4.自定义函数是call函数的实参,并在call中被执行