第七章 Makefile條件執行
1.
條件判斷的基本文法
一個簡單的不包含“
else
”分支的條件判斷語句的文法格式為:
CONDITIONAL-DIRECTIVE
TEXT-IF-TRUE
endif
包含“
else
”的複雜一點的文法格式為:
CONDITIONAL-DIRECTIVE
TEXT-IF-TRUE
else
TEXT-IF-FALSE
endif
1)
關鍵字“
ifeq
”
ifeq
(ARG1, ARG2)
2)
關鍵字“
ifneq
”
ifneq
(ARG1, ARG2)
3)
關鍵字“
ifdef
”
ifdef VARIABLE-NAME
如果變數“
VAEIABLE_NAME
”的值非空(在
Makefile
中沒有定義的變數的值為空白),那麼運算式為真
。否則,運算式為假。
對於“
ifdef
”需要說明的是:
ifdef
只是測試一個變數是否有值,不會對變數進行替換展開來判斷變數的值是否為空白。對於變數“
VARIABLE-NAME
”,除了“
VARIABLE-NAME=
”這種情況以外,使用其它方式對它的定義都會使“
ifdef
”返回真。就是說,即使我們通過其它方式(比如,定義它的值引用了其它的變數)給它賦了一個空值,“
ifdef
”也會返回真。我們來看一個例子
:
例
1
:
bar =
foo = $(bar)
ifdef foo
frobozz = yes
else
frobozz = no
endif
例
2
:
foo =
ifdef foo
frobozz = yes
else
frobozz = no
endif
例
1
中的結果是:“
frobozz
= yes
”;而例
2
的結果是:“
frobozz
= no
”。其原因就是在例
1
中,變數“
foo
”的定義是“
foo
= $(bar)
”。雖然變數“
bar
”的值為空白,但是“
ifdef
”判斷的結果是真。
4)
關鍵字“
ifndef
”
ifndef VARIABLE-NAME
命令列前的“
+
”的意思是告訴
make
,即使
make
使用了“
-t
”參數,“
+
”之後的命令都需要被執行。