2011-11-05 78 views
1

究竟如何讓知道文件是否被修改,運行某些規則?這些信息必須存在於某個地方,那麼是否有文件存儲在某處,並且存儲了來自文件的時間戳?make程序在哪裏存儲其信息?

有很多使程序,因此我不知道依賴性檢查背後的原則是否都是相同的。如果它們差別很大,我主要對GNU Make感興趣;儘管知道任何差異是很好的。

+1

它對實際文件名使用'stat()'系統調用。當它運行時,它會保持它所運行文件的時間標籤,但它通過查看文件系統來重新確定每次運行的時間。 –

回答

3

檢查輸入與輸出的時間戳。例如,如果.o比.c早,它會假定您必須編輯它,並且.o需要重新制作。

+0

就這麼簡單,呃?令人驚訝的是,我無法抵達這個解決方案。 – sidyll

1

它從文件系統實時讀取時間戳。

2

簡單。比較源文件上的時間戳(修改日期,創建日期等等作爲文件信息的一部分存儲)和輸出文件(可執行文件或目標文件)。如果源文件是「較新的」,則重新編譯。

有時當我的源文件中有錯誤的時間戳時,我在將來設置日期的計算機上編輯它們,然後我只需要touch *我的源文件來更改時間戳並且它可以工作。

+0

感謝您的提示mtahmed! – sidyll

0

僅當通過build_check target_newer請求時,傳統的做法是使用makepp。這是因爲網絡文件系統並不總是同意時間戳,並且在複製文件時可以修改它們。還有秒精度(FAT甚至2s)的文件系統仍然廣泛傳播。現在很多時候都可以發生。

因此,makepp會計算內容的智能簽名(不包括註釋和不重要的空白,例如C族語言)。然後將其存儲在.makepp/yoursourcename.mk中,並在下次檢測時查看是否有重大更改。所有依賴關係的智能簽名(自動檢測到)以及命令字符串和其他一些細節決定是否需要重建。

makepp還有很多。除了幾乎所有的GNU make功能之外,還有更多有用的東西,甚至可以用一些Perl編程擴展makefile。

相關問題