makefile--函數(shù)定義 函數(shù)調(diào)用

函數(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í)行
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容