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