(1)make 直譯器提供了一系列的函式供 makefile 呼叫(預定義函式)
(2)在 makefile 中支援自定義函式實現,並呼叫執行(自定義函式)
(3)通過define關鍵字實現自定義函式
2.1 自定義函式的語法
函式定義:
其中,$(0)代表被呼叫的函式名,$(1) , $(2) , $(3)...代表呼叫函式時後面的傳參
函式呼叫:
2.2 深入理解自定義函式
(1)自定義函式本質是乙個多行變數,無法直接呼叫,需要使用call關鍵字,$(call func , param1, param2, ...) 首先將引數傳遞到多行變數裡的命令中,然後將命令原地展開。
(2)自定義函式是一種過程呼叫,沒有任何的返回值。函式和過程是兩種東西,c 語言中進行了統一,加 return 是函式,不加 return 是過程。
(3)自定義函式用於定義命令集合,並應用於規則中
【實驗1:自定義函式的使用】
1【實驗2:深入理解自定義函式】#演示自定義函式的使用
23 .phony :test45
define
func1
6 @echo "my name is $(0)"
7endef89
define
func2
10 @echo "my name is $(0)"
11 @echo "param 1 => $(1)"
12 @echo "param 2 => $(2)"
13endef
1415 test :
16$(call func1)
17 $(call func2, swj,cool)
1819
#輸出結果
20my name is func1
21my name is func2
22 param 1 =>swj
23 param 2 => cool
1 .phony :test233.1 預定義函式的概念define
func1
4 @echo "my name is $(0)"
5endef
67 test :
8$(call func1)
9$(func1)
1011
#輸出結果:注意兩者的區別,call會傳參後原地展開,多行變數不會傳參直接原地展開
12my name is func1
13 my name is
(1)make 的函式提供了處理檔名、變數和命令的函式
(2)可以在需要的地方呼叫函式來處理指定的引數
(3)函式在呼叫的地方被替換為處理結果
3.2 預定義函式的呼叫
自定義函式和預定義函式差別
(1)makefile 中不支援真正意義上的自定義函式,自定義函式只是call函式的實參,並在call中執行
(2)自定義函式的本質是多行變數
(3)預定義的call函式在呼叫時會將引數傳遞給多行變數(call的物件必須為多行變數,否則不起作用,不會傳遞引數)
【程式設計實驗】
1 .phony :test23注:本文整理於《狄泰12月提公升計畫》課程內容狄泰qq群:199546072define
func1
4 @echo "my name is $(0)"
5endef67
define
func2
8 @echo "my name is $(0)"
9endef
1011 var1 :=$(call func1)
12 var2 :=$(call func2)
13 var3 := $(abspath ./)
1415 test :
16 @echo "var1 => $(var1)"
17 @echo "var2 => $(var2)"
18 @echo "var3 => $(var3)"
1920
#輸出結果
21 var1 => @echo
my name is func1
22 var2 => @echo
my name is func2
23 var3 => /home/swj/12-plan/makefile/lesson-9
第9課 函式過載分析(下)
本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 函式過載遇上函式指標 程式設計實驗 函式過載vs函式指標 include include intfunc int x intfunc int a,int b intfunc const char s typedef int pfun...
7 函式 呼叫及定義函式
資料型別轉換 python內建的常用函式還包括資料型別轉換函式,比如int 函式可以把其他資料型別轉換為整數 int 123 123 int 12.34 12 float 12.34 12.34 str 1.23 1.23 str 100 100 bool 1 true bool false函式名其...
09 函式定義及呼叫
makefile 中支援函式的概念 自定義函式示例 define func1 echo my name is 0 endef define func2 echo my name is 0 echo param one is 1 echo param one is 2 endef test call ...