出於好奇,Makefile如何知道文件已更改(然後重新編譯它)?是否達到make
?它是由編譯器決定的嗎?如果是這樣,它是否依賴於語言?Makefile如何知道文件已更改(然後重新編譯它)?
23
A
回答
22
它看起來像文件時間戳 - 很簡單。如果依賴關係比目標更新,則目標被重建。
4
通過檢查有關文件的信息而不是它們的內容來工作。
確定目標及其依賴項之間的依賴關係,然後查看是否存在這些文件。如果他們這樣做,它會向操作系統詢問上次修改文件的時間和日期。這是用於此目的的'時間戳',儘管該術語可以具有其他含義。
如果目標文件或者不存在,或者存在並且早於其依賴文件,那麼Make會通過應用規則從依賴項重建目標。
如果依賴關係不存在,則表明發生錯誤。
這樣做的結果是,您可以通過刪除目標或通過'觸摸'依賴關係使其晚於目標來強制重建。您可以通過「觸摸」目標來避免重建。觸摸只是將時間戳更新爲現在。
相關問題
- 1. C Makefile - 僅重新編譯已更改的文件
- 2. Makefile不重新編譯頭文件更改
- 3. 用於java的makefile,僅在文件更改時重新編譯
- 4. 如何在更改Makefile標誌時強制重新編譯?
- 5. 編譯器如何知道何時不重新編譯?
- 6. Grails shell不重新編譯已更改的文件
- 7. 如何更改已編譯的.class文件而不反編譯?
- 8. Mercurial hook:更改後不重新編譯?
- 9. 如何強制重新編譯Makefile中的單個文件?
- 10. Makefile始終重新編譯
- 11. makefile - 在重新編譯其他c文件時總是重新編譯version.c
- 12. 如何防止SBT重新編譯修改後的.class文件?
- 13. 重新編譯scss文件以更改樣式而不必更改它們
- 14. 如何讓grails run-app重新編譯文件,因爲它們被更改?
- 15. 如何避免重新編譯* .scala.html文件中的更改
- 16. Grunt watch&LESS - 如何讓它更快? (僅編譯已更改的文件)
- 17. 如何知道我正在編譯的.net版本,以及如何更改它?
- 18. VS2010編譯如何知道跳過未修改的文件
- 19. TableModel如何知道值已更改?
- 20. 如何知道.NET C#中的文件是否已更改?
- 21. 如何知道行是否已更新
- 22. 重新編譯未更新的文件
- 23. python解釋器如何知道何時編譯和更新.pyc文件?
- 24. 修改makefile編譯.CC和.cpp文件
- 25. 如何讓瀏覽器知道文件已更新? ASP.NET MVC
- 26. NSTextField如何知道它的值已更改?
- 27. 如何更新已編譯的文本資源文件?
- 28. 如何從Makefile獲取已編譯文件的列表?
- 29. 內核Makefile如何神奇地知道要編譯什麼?
- 30. 如何讓「Makefile文件「?編譯錯誤
還有一件事......它處理像'git'這樣的變化嗎?有沒有可能讀取該文件?謝謝:) – makeMonday
@makeMonday:我不明白你的問題。什麼makefile所做的就是Clifford在你的回答中所說的。諸如保留以前文件的副本以便與最近的文件進行比較不屬於「製作」作業。 –
@TheMask是的,現在我完全明白了。我讀了那些時間戳。我只是想知道他們是如何工作的。謝謝;) – makeMonday