make--变量 条件判断 函数定义及调用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了make--变量 条件判断 函数定义及调用相关的知识,希望对你有一定的参考价值。
一.变量的高级主题
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实际执行的语句;但是,不能控制规则中命令的执行过程
条件判断的关键字有四种:
关键字 | 功能 |
---|---|
ifeq | 判断参数是否相等,相等为true,否则为false |
ifneq | 判断参数是否不相等,不相等为true,否则为false |
ifdef | 判断变量是否有值,有值为true,否则为false |
ifndef | 判断变量是否没有值,没有值为true,否则为false |
三.函数定义及调用
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中被执行
以上是关于make--变量 条件判断 函数定义及调用的主要内容,如果未能解决你的问题,请参考以下文章