【轉】Makefile的內嵌函數

【轉】Makefile的內嵌函數

摘自《GNU+Makefile中文手冊》整理翻譯:徐海兵

GNU make 的函數提供了處理文件名、變量、文本和命令的方法。使用函數我們的 Makefile 可以書寫的更加靈活和健壯。可以在需要的地方地調用函數來處理指定的文本(需要處理的文本作爲函數的參數),函數的在調用它的地方被替換爲它的處理結果。函數調用(引用)的展開和變量引用的展開方式相同。

1. 函數的調用語法

GNU make 函數的調用格式類似於變量的引用,以“ $”開始表示一個引用。語法格式如下:

$(FUNCTION ARGUMENTS)

或者:

${FUNCTION ARGUMENTS}

對於函數調用的格式有以下幾點說明

  1. 調用語法格式中“ FUNCTION”是需要調用的函數名,它應該是 make 內嵌的函數名。對於用戶自己的函數需要通過 make 的“ call”函數來間接調用。

  2. “ ARGUMENTS”是函數的參數,參數和函數名之間使用若干個空格或者[tab]字符分割(建議使用一個空格,這樣不僅使在書寫上比較直觀,更重要的是當你不能確定是否可以使用[Tab]的時候,避免不必要的麻煩);如果存在多個參數時,參數之間使用逗號“ ,”分開。

  3. 以“ 使Makefile使使使使vimMakefile使makeMakefile (sort (x)) (sort ${x})”和其它幾種。

  4. 函數處理參數時,參數中如果存在對其它變量或者函數的引用,首先對這些引用進行展開得到參數的實際內容。而後纔對它們進行處理。參數的展開順序是按照參數的先後順序來進行的。

  5. 書寫時,函數的參數不能出現逗號“ ,”和空格。這是因爲逗號被作爲多個參數的分隔符,前導空格會被忽略。在實際書寫 Makefile 時,當有逗號或者空格作爲函數的參數時,需要把它們賦值給一個變量,在函數的參數中引用這個變量來實現。我們來看一個這樣的例子:

comma:= ,
empty:=
space:= $(empty) $(empty)
foo:= a b c
bar:= $(subst $(space),$(comma),$(foo))

這樣我們就實現了“ bar”的值是“ a,b,c”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章