函數(shù)定義與調(diào)用
1. makefile中支持函數(shù)的概念
- make解釋器提供了一系列的函數(shù)供makefile調(diào)用
- 在makefile中支持自定義函數(shù)實現(xiàn),并調(diào)用執(zhí)行
- 通過define關(guān)鍵字實現(xiàn)自定義函數(shù)
示例1--函數(shù)定義
define func1
@echo "my name is $(0)"
endef
define func2
@echo "my name is $(0)"
@echo "param1 => $(1)"
@echo "param2 => $(2)"
endef
示例1--函數(shù)調(diào)用
test :
$(call func1)
$(call func2, value1)
9-1.PNG
2. 深入理解自定義函數(shù)
- 自定義函數(shù)是一個多行變量,無法直接調(diào)用,需要使用call進行調(diào)用
- 自定義函數(shù)是一種過程調(diào)用,沒有任何的返回值
- 自定義函數(shù)用于定義命令集合,并應(yīng)用于規(guī)則中
示例2--自定義函數(shù)的應(yīng)用
define func1
@echo "my name is $(0)"
endef
var1 := $(call func1)
var11 := $(func1)
test :
@echo "var1 => $(var1)"
@echo "var11 => $(var11)"
9-2.PNG
3. make解釋器中的預(yù)定義函數(shù)
- make的函數(shù)提供了處理文件名,變量和命令的函數(shù)
- 可以在需要的地方調(diào)用函數(shù)來處理指定的參數(shù)
- 函數(shù)在調(diào)用的地方被替換為處理結(jié)果
預(yù)定義函數(shù)的調(diào)用方法:
var := $(func_name arg1,arg2,...)
說明:
var表示返回值,func_name表示函數(shù)名,arg1,arg2表示函數(shù)實參
示例3--預(yù)定義函數(shù)調(diào)用
var := $(abspath ./)
test :
@echo "var => $(var)"
9-3.PNG
自定義函數(shù)和預(yù)定義函數(shù)的本質(zhì)區(qū)別:
- makefile中不支持真正意義上的自定義函數(shù)
- 自定義函數(shù)的本質(zhì)是多行變量
- 預(yù)定義的call函數(shù)在調(diào)用時將參數(shù)傳遞給多行變量
-
自定義函數(shù)是call參數(shù)的實參,并在call中被執(zhí)行
示例4--call調(diào)用多行變量(call無法調(diào)用變量)
.PHONY : test
define func1
@echo "my name is $(0)"
endef
func2 := @echo "my name is $(0)"
test :
$(call func1)
$(call func2)
9-4.PNG
示例5--call調(diào)用多行變量
.PHONY : test
define func1
@echo "my name is $(0)"
endef
define func2
@echo "my name is $(0)"
endef
test :
$(call func1)
$(call func2)
9-5.PNG
示例6--自定義函數(shù)與預(yù)定義函數(shù)區(qū)別
.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.app)
test :
@echo "var1 => $(var1)"
@echo "var2 => $(var2)"
@echo "var3 => $(var3)"
@echo "var4 => $(var4)"
9-6.PNG
小結(jié)
- make解釋器提供了一系列的函數(shù)供makefile調(diào)用
- 自定義函數(shù)是一個多行變量,無法直接調(diào)用,只能借助于call進行間接調(diào)用
- 自定義函數(shù)用于定義命令集合,并應(yīng)用于規(guī)則中
- 預(yù)定義的call函數(shù)在調(diào)用時將參數(shù)傳遞給多行變量
- 自定義函數(shù)是call函數(shù)的實參,并在call中被執(zhí)行