第9課 - 函數定義及調用
阿新 • • 發佈:2017-05-14
函數的調用 align 應用 abs end 語言 命令集 func home
第9課 - 函數定義及調用
1. makefile中的函數
(1)make 解釋器提供了一系列的函數供 makefile 調用
(2)在 makefile 中支持自定義函數實現,並調用執行
(3)通過 define 關鍵字實現自定義函數
2. 在makefile中自定義函數
(1)自定義函數的語法
其中,$(0) 代表被調用的函數名,$(1) , $(2) , $(3) ... 代表調用函數時後面的傳參
(2)深入理解自定義函數
— 自定義函數是一個多行變量,無法直接調用
— 自定義函數是一種過程調用,沒有任何的返回值。函數和過程是兩種東西,C語言中進行了統一,加return是函數,不加return是過程。
— 自定義函數用於定義命令集合,並應用於規則中
1 # 演示自定義函數的使用 2 3 .PHONY : test 4 5 define func1 6 @echo "My name is $(0)" 7 endef 8 9 define func2 10 @echo "my name is $(0)" 11 @echo "param 1 => $(1)" 12 @echo "param 2 => $(2)" 13 endef 14 15 test : 16 $(call func1) 17 $(call func2, swj, cool)18 19 # 輸出結果 20 My name is func1 21 my name is func2 22 param 1 => swj 23 param 2 => cool
自定義函數的本質就是多行變量,只不過加上了call關鍵字。 $(call func , param1, param2, ...) 首先將參數傳遞到多行變量裏的命令中,然後將命令原地展開。
1 .PHONY : test 2 3 define func1 4 @echo "My name is $(0)" 5 endef 6 7 test : 8 $(call func1)9 $(func1) 10 11 # 輸出結果:註意兩者的區別,call會傳參後原地展開,多行變量不會傳參直接原地展開 12 My name is func1 13 My name is
3. make解釋器中的預定義函數
(1)預定義函數的概念
— make 的函數提供了處理文件名,變量和命令的函數
— 可以在需要的地方調用函數來處理指定的參數
— 函數在調用的地方被替換為處理結果
(2)預定義函數的調用
(3)為什麽自定義函數和預定義函數的調用形式完全不同?
— makefile 中不支持真正意義上的自定義函數
— 自定義函數的本質是多行變量
— 預定義的 call 函數在調用時將參數傳遞給多行變量(call 的對象必須為多行變量,否則不起作用,不會傳遞參數)
— 自定義函數是 call 函數的實參,並在 call 中被執行
1 .PHONY : test 2 3 define func1 4 @echo "My name is $(0)" 5 endef 6 7 define func2 8 @echo "My name is $(0)" 9 endef 10 11 var1 := $(call func1) 12 var2 := $(call func2) 13 var3 := $(abspath ./) 14 15 test : 16 @echo "var1 => $(var1)" 17 @echo "var2 => $(var2)" 18 @echo "var3 => $(var3)" 19 20 # 輸出結果 21 var1 => @echo My name is func1 22 var2 => @echo My name is func2 23 var3 => /home/swj/12-plan/makefile/lesson-9
註:本文整理於《狄泰12月提升計劃》課程內容
第9課 - 函數定義及調用