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所支持的方式)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM