makefile指令

條件指令和引入指令

條件指令

用來控制make執行流程的條件具有多種形式,比如“是否已定義”或“是否等於”。
條件指令的基本語法:

if-condition
    text if the condition is true
else
    text if the condition is false
endif

其中的if-condition可以是:
ifdefvariable-name
ifndef variable-name
ifeq test
ifneq test
在進行ifdef/ifndef的測試時,不應該以$()擴住variable-nametest可以表示成:"a" "b"或者:(a,b)

條件處理指令可以用在宏定義和命令腳本中,還可以放在makefile的頂層。

在使用相等或者不等的條件判斷時,經常發生“變量擴展後包含了非預期的空格”的情況,可以使用strip函數去除空格。

ifeq "$(strip $(OPTIONS))" "-d"
    COMPILATION_FLAGS += -DDEBUG
endif

include指令

一個makefile可以引入(include)其他文件。此功能常用來引入make頭文件中所存放的共同的定義,或是用來自動產生依存的信息。
includeFILES
FILES可以是多個文件,可以使用shell通配符以及變量。

當make看到include指令時,會對文件名中的通配符和變量進行擴展,然後尋找所需的文件。如果文件存在,就將文件的內容添加到此處;如果某個文件不存在,make會發出警告並且繼續讀取其餘的makefile文件。
當所有的讀取動作完成之後,make會從規則數據庫中找出任何可用來跟新引入文件的規則。如果找到了一個相應的規則,make就會先更新引入文件。如果任何一個引入文件被更新,make接着會清除它的內部數據庫並且重新讀進引入文件。
如果完成讀取、更新和重新讀取的過程之後,仍有include指令因爲文件不存在而執行失敗,那麼make顯示錯誤狀態並終止。

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