可以使用編譯器快取工具complier cache(ccache)來加快編譯速度. 如果你經常"make clean" ,
ccache能大大縮短再次編譯的時間
可以通過設定以下命令來啟用ccache。可以將該環境變數寫入.bashrc或類似檔案,避免每次都設定。
$ export USE_CCACHE=1
預設cache儲存在~/.ccache. 可以使用下列命令來設定路徑
$ export CCACHE_DIR=<path-to-your-cache-directory>
推薦的cache大小為50-100GB. 可以使用下列命令來設定cache size
$ prebuilt/linux-x86/ccache/ccache -M 50G (工程目錄下運行)
該設定會永久儲存在CCACHE_DIR
可以使用以下命令來查看ccache的健全狀態:
$ watch -n1 -d prebuilt/linux-x86/ccache/ccache -s (工程目錄下運行)
目前在我們的項目中已經設定有ccache,但cache size 偏小,可以重新設定一下cache size即可。
原理簡介:
ccache 工具通過將標頭檔快取到源檔案之中而改進了構建效能,因而通過減少每一步編譯時間添加標頭檔所需要的時間而提高了構建速度
在標準的編譯過程中,在 UNIX 下使用 C/C++ 開發應用程式通常需要用到一個編譯器(如 gcc)以及一個編譯工具,比如 make。make 和所有的 C 編譯器的問題在於 C 預先處理程式(preprocessor)和標頭檔的工作方式。觀察一個典型的 C 源檔案,您會發現其中有很多由 #include 所引用的各種標頭檔。
每一次編譯一個檔案時,C 預先處理程式(cpp)都會解析並引入每個標頭檔以及這些標頭檔引用到的任何檔案。通過對內容進行解析,ccp 可以將一個相當基本的 1-KB 大小的源檔案轉化為一個 8-KB 大小的源檔案,在這個過程中,會合并入幾十個甚至幾百個標頭檔。在典型的開發項目中,有很多與項目相關的標頭檔可能會在不同的源檔案中多次被引入,而且每個標頭檔本身也可能引用很多其他標頭檔。
在典型的編譯過程中,make 工具只編譯自上次編譯後發生修改的檔案,這樣就在很大程度上簡化了編譯過程。
make 將必須被編譯的檔案限制在經過修改的那些源檔案範圍之內,但是即使是使用 make,仍然有相當可觀的浪費。每一次編譯項目時,源檔案在編譯為組合語言和最終的機器代碼之前,都要通過 cpp 進行解析。對每一個檔案來說,每一次可能都要重新解析標頭檔。從編譯的全過程來看,您最後可能多次解析了相同的標頭檔,浪費了處理器周期,更重要的是浪費了開發人員的時間,因為他們要等待這一過程的完成。在一個團隊中,這一影響可能會更為明顯,
因為多名開發人員可能都會反覆多次重複這一過程,在某一天甚至可能會同時進行。
ccache(“compiler cache”的縮寫)工具會快取編譯產生的資訊,並在編譯的特定部分使用快取的資訊,比如標頭檔,這樣就節省了通常使用 cpp 解析這些資訊所需要的時間。如果您編譯清單 2 中的檔案,假定 foobar.h 中包含對其他標頭檔的引用,ccache 會用那個檔案的 cpp-parsed 版本來取代 include 聲明。就那麼簡單。不是真正去讀取、理解並解釋其內容,ccache 只是將最終的文本拷貝到檔案中,使得它可以立即被編譯。
清單 2. 源檔案內容
#include "foobar.h"
void main