第45-54行:
45 # Deal with colliding definitions from tcsh etc.
46 VENDOR=
47
48 #########################################################################
49 # Allow for silent builds
50 ifeq (,$(findstring s,$(MAKEFLAGS))) //判斷findstring函數是否為空
51 XECHO = echo //如果有就echo
52 else
53 XECHO = : //如果沒有就為空,即不打印
54 endif
55
這一段 主要是關於靜默編譯的內容
uboot允許靜默編譯,開啟靜默編譯主要是通過判斷ifeq (,$(findstring s,$(MAKEFLAGS))) 。
使用方法:在編譯時,使用make -s -會作為MAKEFLAGS傳給Makefile.
關於makefile知識點:
條件判斷:主makefile50行 :ifeq (,$(findstring s,$(MAKEFLAGS)))
《跟我一起學Makefile》第42頁:
條件表達式的語法為:
<conditional-directive>
<text-if-true>
endif
以及
<conditional-directiv>
<text-if-ture>
else
<text-if-false>
endif
其中<conditional-directiv>表示條件關鍵字,如“ifeq”。
第一個關鍵字ifeq:
ifeq(<arg1>, <arg2>)
ifeq 'arg1' 'arg2'
ifeq “arg1” 'arg2'
ifeq 'arg1' ”arg2”
ifeq ”arg1” “arg2”
比較參數“arg1” 和“arg2”的值是否相同。相同為真。
第二個關鍵字ifneq:
ifneq (<arg1>, <arg2>)
ifneq 'arg1' 'arg2'
ifneq “arg1” 'arg2'
ifneq 'arg1' ”arg2”
ifneq ”arg1” “arg2”
比較參數“arg1” 和“arg2”的值是否相同。不同為真。
第三個關鍵字ifdef:
ifdef <variable-name>
如果變量的值非空,那么表達式為真,否則為假。
findstring函數
函數調用語法:
$(<funciton> <arguments>)
或者
${<function> <arguments>}
$(findstring <find>, <in>)
功能:在字串<in>中查找<find>字串。
返回:如果找到,那么返回<find>,否則返回空字符串。
所以這里ifeq (,$(findstring s,$(MAKEFLAGS)))
這里的意思就是如果findstring函數的返回值為空。如果為空,那么ifeq函數的兩個參數相等,條件判斷為真。執行<text-if-true>.