android原始碼中ccache使用及原理簡介

2021-06-28 06:05:55 字數 1649 閱讀 4451

**:

可以使用編譯器快取記憶體工具complier cache(ccache)來加快編譯速度. 如果你經常"make clean" ,

ccache能大大縮短再次編譯的時間

可以通過設定以下命令來啟用ccache。可以將該環境變數寫入.bashrc或類似檔案,避免每次都設定。

$ export use_ccache=1

預設cache儲存在~/.ccache. 可以使用下列命令來設定路徑

$ export ccache_dir=

推薦的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

獲取Android原始碼

git是linux torvalds為了幫助管理linux核心開發而開發的乙個開放原始碼的公布式版本控制軟體。在git版本控制系統中,每乙個工作目錄都包含乙個完整倉庫,它們支援離線工作。android是由kernel dalvik bionic build等多個git專案組成的,所以android專...

android 原始碼更新

copy一篇在這裡,操作是有效的。另外其實用git還是有很多經驗了,所以這篇對比了下讚!官方的總是最靠譜 另乙個靠譜的就是它了 copy from 檢視可切換的分支 cd repo manifests git branch a cut d f 3 以 gingerbread release 分支為例...

Android原始碼版本

分享一下 通過修改system build.prop這個檔案來玩只改部分幾個 支援中文任你改 手機型號 品牌 內部版本號 android版本 d395o 一起搞基 純粹娛樂分享 9100 4.0 2.3.6 親測成功.首先你需要有一台root過的機器以及re管理器 開啟re管理器,進入system資...