當我編輯一個源文件時,是否運行make重新編譯該文件以及該文件是哪個文件是依賴項?如果是這樣,爲什麼?當我更改一個文件時,爲什麼'make'會重新編譯多個文件?
回答
爲什麼?
因爲這是有一個Make文件的全部目的。
如果修改了某個特定的源文件,則應該使用修改後的文件重新編譯所有依賴文件,以便所有相關文件都引用相同的源並且整個代碼庫同步。
如何?
make
實用程序檢查時間戳以檢查哪些文件被修改。創建make文件時需要指定依賴關係規則,它明確告訴實用程序哪些其他文件依賴於特定文件。因此,使用這些規則編譯所有依賴文件,以便生成的二進制文件引用相同的更新代碼。
好吧,爲什麼部分,幽默我的例子。文件A包含對文件B中定義的函數的調用。因此,如果我只是向文件B添加分號,make必須重新編譯A,因爲所有人都知道,A調用的函數簽名可能已更改? – Rooster
@bbarre:是的,這是正確的。 –
@bbarre:也許吧。如果B.h是*聲明*或*定義*函數的頭文件,並且A.cpp包含B.h,則B.h應該是A.o(或A或A.exe,無論您從A構建的)的依賴關係。但是,如果B.cpp是*定義函數的文件,而A.cpp在別處得到函數的聲明,那麼假設您將A.cpp和B.cpp分別編譯到Ao和Bo,那麼B.cpp不需要是Ao的依賴在那種情況下,A.o和B.o仍然依賴於你從它們構建的任何可執行文件。所以如果你改變B.cpp離開B.h一個人,B.o和exe被重建,那麼A.o不是。 –
當我編輯一個源文件時,是否運行make重新編譯該文件 加上那個是依賴關係的所有文件?如果是這樣,爲什麼?
它可能會發生一個壞的生成文件(你沒有發佈它如何看起來像)。
或者源文件包含模板的實現,幷包含在某處。
如果該文件包含在其他文件中,則期望其他文件重新編譯以及不希望程序的「一半」是新的,而另一半是「舊」的是合理的。
- 1. 當頭文件改變時,GNU-Make不會重新編譯
- 2. 爲什麼如果我只更改一個文件,makefile會重新編譯整個文件集?
- 3. 爲什麼在源文件更改時不make重新編譯這些目標文件?
- 4. 爲什麼編譯一個PHP文件?
- 5. gnu make。只重新編譯未更改的文件
- 6. 強制ERL -make重新編譯文件時宏改變
- 7. Prestashop:SMARTY - 當文件被修改時強制編譯/重新編譯
- 8. 更改一個CLJC文件導致完全重新編譯
- 9. Make Play!在修改文件時重新編譯,而不是在瀏覽器刷新時重新編譯
- 10. 爲什麼java編譯器爲單個java文件生成多個.class文件?
- 11. 爲什麼我的移動運營商在下載文件時會重新編碼一個文件?
- 12. 編譯多個源文件時創建一個C文件
- 13. 爲什麼在複製文件超過其他文件時,git會將整個文件更改爲已更改?
- 14. 當文件夾更新時,角度cli防止重新編譯
- 15. 編譯源文件時'make'不重編譯
- 16. 當我讀/寫同一個文件時會發生什麼?
- 17. 當我在UNIX上重命名文件時,什麼時間戳會被更改
- 18. 更改資源(如圖標)不會重新編譯.qrc文件
- 19. Make不編譯好文件
- 20. 我應該改變什麼來使這個文件編譯?
- 21. 重新編譯未更新的文件
- 22. 文件不會編譯,要更改什麼?
- 23. 當我發佈解決方案時,爲什麼我的csproj文件會更改?
- 24. 當我編譯我的.coffee文件時有什麼錯誤
- 25. 爲什麼makefile每次都會重新編譯一個類?
- 26. 爲什麼gcc會在這個make文件中執行?
- 27. make/makefile:意識到有一個新的(未更改)源文件
- 28. 爲什麼當我上傳文件,並點擊更多上傳另一個文件的第一個刪除?
- 29. 用於java的makefile,僅在文件更改時重新編譯
- 30. 爲make文件選擇編譯器
請發佈[最小樣本](http://sscce.org/)。沒有看到你在問什麼,就不可能回答問題。 – outis
我認爲任何對make實用程序有很好理解的人都會發現可以回答。 – Rooster
提供示例代碼的目的是澄清和明確指出你在說什麼。技術是一件微妙的事情;微小的差異會產生巨大的後果。沒有具有代表性的示例,回答者只能猜測特定的makefile中發生了什麼。您可能無法以最佳方式構建事物。你爲什麼不利於[改善你的問題](http://tinyurl.com/so-hints)? – outis