2012-04-13 65 views
3

據我所知,ccache通過捕獲先前的彙編和檢測何時再次完成相同的編譯來加速編譯。然而,makefile做同樣的事情。 那麼爲什麼我們需要ccache? 何時我們使用它? 謝謝!何時使用ccache?

回答

4

http://ccache.samba.org/

如果你運行make clean; make,你也許可以從 的ccache受益。由於許多原因,開發人員通常會乾淨地構建一個項目 ,並且這會拋棄以前編譯中的所有信息 。通過使用ccache,重新編譯快得多 。

使用ccache的另一個原因是相同的緩存用於在不同目錄中構建 。如果您有幾個版本或分支 存儲在不同目錄中的軟件,構建目錄中的許多目標文件 可能會從緩存中取出,即使它們已被編譯爲其他版本或分支。

第三種情況是使用ccache加速由 服務器執行的清理構建,或者構建可定期檢查代碼爲 可構建的服務器場。

您還可以在共享編譯服務器上共享用戶之間的緩存,這對於非常有用的 。

+2

當我們運行make clean時,我們要清除所有的.o文件並重新編譯。所以,如果我們想將先前的編譯保存到緩存中,爲什麼不避免在之前運行make clean? – chicklet 2012-04-13 07:52:23

+3

您可能剛剛更改了'Makefile'。或者你可能試圖在沒有'git'的情況下對一個bug進行分割:如果你解壓縮一箇舊版本的tarball,'make'會認爲二進制文件是最新的,因爲它們比源文件更新 - 但這將是錯誤的!在這兩種情況下,都需要「乾淨」。 'ccache'不會犯同樣的錯誤,因爲它使用散列而不是時間戳,並且非常小心只能在輸出相同的情況下進行。 – joeytwiddle 2014-08-05 19:45:43

1
從加快清潔的可疑益處

除了建立由虛線構建系統必要,並具有共享高速緩存的單純偶然益處,存在即使對分離的無瑕疵的mtime基於構建系統合法使用的ccache的:

當你在分支之間來回跳動(不是在談論單獨的目錄)或重新綁定,以至於最終碰到一大堆文件,或者如果你不走運,中央標題(如定義的)。 h)包含在所有的地方,你完美的基於mtime的構建系統會盡職地重建所有東西。如果你在過去的某段時間內建立了大部分相同的狀態,ccache將加速這一重建過程。