Makefile中include、-include、sinclude的區別
如果指示符“include”指定的文件不是以斜線開始(絕對路徑,如/usr/src/Makefile...),而且當前目錄下也不存在此文件;make將根據文件名試圖在以下幾個目錄下查找:首先,查找使用命令行選項“-I”或者“--include-dir”指定的目錄,如果找到指定的文件,則使用這個文件;否則繼續依此搜索以下幾個目錄(如果其存在):“/usr/gnu/include”、“/usr/local/include”和“/usr/include”。
當在這些目錄下都沒有找到“include”指定的文件時,make將會提示一個包含文件未找到的告警提示,但是不會立刻退出。而是繼續處理Makefile的后續內容。當完成讀取整個Makefile后,make將試圖使用規則來創建通過指示符“include”指定的但未找到的文件,當不能創建它時(沒有創建這個文件的規則),make將提示致命錯誤并退出。會輸出類似如下錯誤提示:
Makefile:錯誤的行數:未找到文件名:提示信息(No such file or directory)
Make: *** No rule to make target ‘’. Stop
通常我們在Makefile中可使用“-include”來代替“include”,來忽略由于包含文件不存在或者無法創建時的錯誤提示(“-”的意思是告訴make,忽略此操作的錯誤。make繼續執行)。像下邊那樣:
-include FILENAMES...
使用這種方式時,當所要包含的文件不存在時不會有錯誤提示、make也不會退出;除此之外,和第一種方式效果相同。以下是這兩種方式的比較:
使用“include FILENAMES...”,make程序處理時,如果“FILENAMES”列表中的任何一個文件不能正常讀取而且不存在一個創建此文件的規則時make程序將會提示錯誤并退出。
使用“-include FILENAMES...”的情況是,當所包含的文件不存在或者不存在一個規則去創建它,make程序會繼續執行,只有真正由于不能正確完成終極目標的重建時(某些必需的目標無法在當前已讀取的makefile文件內容中找到正確的重建規則),才會提示致命錯誤并退出。
為了和其它的make程序進行兼容。也可以使用“sinclude”來代替“-include”(GNU所支持的方式)。
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成