自定義函式
define
使用define關鍵字設置變量的值可以有換行,這有利於定義一系列的命令(前面我們講過「命令包」的技術就是利用這個關鍵字)。define指示符後面跟的是變量的名字,而重起一行定義變量的值,定義是以endef關鍵字結束。其工作方式和「=」操作符一樣。變量的值可以包含函數、命令、文字,或是其它變量。因為命令需要以[Tab]鍵開頭,所以如果你用define定義的命令變量中沒有以[Tab]鍵開頭,那麼make就不會把其認為是命令。
define two-lines
echo foo
echo $(bar)
endef
call
$(call <expression>,<parm1>,<parm2>,<parm3>...)
當make執行這個函數時,<expression>參數中的變量,如$(1),$(2),$(3)等,會被參數<parm1>,<parm2>,<parm3>依次取代。而<expression>的返回值就是call函數的返回值。
define generate_file
sed 's/{NAME}/$(1)/' greetings.tmpl >$(2).txt
endef
all:
$(call generate_file,John Doe,101)
$(call generate_file,Peter Pan,102)
eval
$(eval text)
它的意思是 text 的內容將作為makefile的一部分而被make解析和執行。可以想像成用eval會展開變數一次然後產生新的makefile。