1. 程式人生 > >makefile專題:函式定義及呼叫

makefile專題:函式定義及呼叫

關鍵詞:makefile中的函式、自定義函式、預定義函式

1. makefile中的函式

  • make直譯器提供了一系列的函式供 makefile呼叫(即預定義函式,相當於庫函式)
  • 在makefile中支援自定義函式實現,並呼叫執行
  • 通過define關鍵字實現自定義函式
  • 自定義函式的語法
define func1
    @echo "My name is $(0)"		#$(0)表示取函式名
endef

define func2
    @echo "My name is $(0)"
    @echo "Param => $(1)"
endef

test : 
    $(call func1)
    $(call func2, jacob)

輸出結果:

$ make test 
My name is func1
My name is func2
Param =>  jacob

2. 深入理解自定義函式

  • 自定義函式是一個多行變數,無法直接呼叫
  • 自定義函式是一個過程呼叫,沒有任何的返回值
  • 自定義函式用於定義命令集合,並應用於規則中

3. make直譯器中的預定義函式

  • make的函式提供了處理檔名,變數和命令的函式
  • 可以在需要的地方呼叫函式來處理指定的引數
  • 預定義函式是有返回值,函式在呼叫的地方被替換為處理結果
  • 預定義函式的呼叫語法規則
.PHONY : test

var := $(abspath ./)

test : 
     @echo
"var => $(var)"

輸出結果:

delphi@delphi-vm:~/code/ch1_make$ make test 
var => /home/delphi/code/ch1_make

4.為什麼自定義函式預定義函式的呼叫形式完全不同?——本質剖析

  • makefile中不支援真正意義上的自定義函式
  • 自定義函式的本質是多行變數
  • 預定義的call函式在呼叫時將引數傳遞給多行變數
  • 自定義函式是call函式的實參,並在call中被執行

5. 小結

  • make直譯器提供了一系列的函式供makefile呼叫
  • 自定義函式是一個多行變數,無法直接呼叫
  • 自定義函式用於定義命令集合
    ,並應用於規則中
  • 預定義的call函式在呼叫時將引數傳遞給多行變數
  • 自定義函式是call函式的實參,並在call中被執行

宣告:此文章為本人在學習狄泰軟體學院《十二月提升計劃》所做的筆記,參考書籍《專業嵌入式軟體開發》——李雲,文章中包含狄泰軟體資料內容和《專業嵌入式軟體開發》資料內容,一切版權歸狄泰軟體《專業嵌入式軟體開發》所有!