1. 程式人生 > >makefile(五):makefile的條件判斷與迴圈

makefile(五):makefile的條件判斷與迴圈

如果說任何程式都可以由順序,分支,迴圈來組成的話,前面介紹的相當於順序部分,本部分介紹分支和迴圈
makefile的條件判斷和迴圈非常簡單。

一.條件判斷

條件判斷的語法如下:

ifeq (條件表示式) 
執行體
endif
ifeq (條件表示式) 
執行體
else
執行體
endif

解釋:如果條件表示式的返回值為真,則執行下面的執行體,否則執行else後面的執行體,每一個條件表示式都必須以endif作為結尾
條件表示式可以寫成如下的形式

`ifeq (ARG1, ARG2)'
`ifeq 'ARG1' 'ARG2''
`ifeq "ARG1" "ARG2"'
`ifeq "ARG1" 'ARG2'' `ifeq 'ARG1' "ARG2"'

除了ifeq以外,還有ifneq,格式同ifeq相同,他表示的意思與ifeq相同,不在贅述。
除了判斷兩個引數是否相等以外,還可以通過ifdef來判斷一個變數是否有值如下:

ifdef 變數名
執行體
endif

同樣它也可以使用帶else的形式,格式如ifeq和ifneq
他表示的意思是:如果變數有值,那麼就執行相應的執行體。
舉例如下:

ifdef wanbiao
name=wan
else
name=biao
endif

這個例子的意思是:當wanbiao這個變數有值得時候,則name變數的值被賦值為wan,否則被賦值為biao
這裡需要注意一下:當wanbiao這個變數的值是一個引用值,在判斷的時候,並不會被展開如下:

firstname=
wanbiao=$(firstname)
ifdef wanbiao
name=wan
else
name=biao
endif

這個的結果將是 name的值為wan,儘管firstname的值為空, 且wanbiao的值為空。但是ifdef只判斷最淺層是否有賦值。當wanbiao=$(firstname)時,wanbiao被判定為已經賦值,即值為$(firstname),因此為true

二.迴圈

使用迴圈可以有兩種方法:1.shell裡面的迴圈2.直接使用makefile裡面的迴圈函式
因為makefile裡面可使用shell命令因此,shell裡面的迴圈也可以書寫在make裡面,shell裡面的迴圈書寫,可以參考前面關於shell的介紹。這裡介紹makefile裡面專門用於迴圈的函式。
makefile裡面沒有明確的關於迴圈的語法。但是可以使用迴圈函式foreach,達到迴圈的目的
foreach函式如下。

$(foreach VAR,LIST,TEXT)

將LIST裡面的值依次賦值給VAR,然後再執行TEXT裡面的內容。
返回值: 空格分割的多個表示式“ TEXT”的計算的結果
舉例如下

dirs := a b c d
files := $(foreach dir,$(dirs),$(wildcard $(dir)/*))

分別取出$(dirs)的值賦值給dir,然後執行後面的,並將結果返回給files,因此files的值為

a/* b/* c/* d/*