條件指令和引入指令
條件指令
用來控制make執行流程的條件具有多種形式,比如“是否已定義”或“是否等於”。
條件指令的基本語法:
if-condition
text if the condition is true
else
text if the condition is false
endif
其中的if-condition
可以是:
ifdef
variable-name
ifndef
variable-name
ifeq
test
ifneq
test
在進行ifdef/ifndef
的測試時,不應該以$()
擴住variable-name
。test
可以表示成:"a" "b"
或者:(a,b)
。
條件處理指令可以用在宏定義和命令腳本中,還可以放在makefile的頂層。
在使用相等或者不等的條件判斷時,經常發生“變量擴展後包含了非預期的空格”的情況,可以使用strip
函數去除空格。
ifeq "$(strip $(OPTIONS))" "-d"
COMPILATION_FLAGS += -DDEBUG
endif
include指令
一個makefile可以引入(include)其他文件。此功能常用來引入make頭文件中所存放的共同的定義,或是用來自動產生依存的信息。
include
FILES
FILES
可以是多個文件,可以使用shell通配符以及變量。
當make看到include指令時,會對文件名中的通配符和變量進行擴展,然後尋找所需的文件。如果文件存在,就將文件的內容添加到此處;如果某個文件不存在,make會發出警告並且繼續讀取其餘的makefile文件。
當所有的讀取動作完成之後,make會從規則數據庫中找出任何可用來跟新引入文件的規則。如果找到了一個相應的規則,make就會先更新引入文件。如果任何一個引入文件被更新,make接着會清除它的內部數據庫並且重新讀進引入文件。
如果完成讀取、更新和重新讀取的過程之後,仍有include指令因爲文件不存在而執行失敗,那麼make顯示錯誤狀態並終止。