天天看點

Android 系統(64)---Android中m、mm、mmm、mma、mmma的差別【轉】

m:編譯整個安卓系統

     makes from the top of the tree

mm:編譯目前目錄下的子產品,目前目錄下需要有android.mk這個makefile檔案,否則就往上找最近的android.mk檔案。

         builds all of the moudles in the current directory

         mma:目前目錄新增或删除檔案後,可以用mma重新編譯。

mmm:編譯指定路徑下的子產品,指定的路徑下面需要有android.mk這個makefile檔案

             builds all of the moudles in the supplies directory

            mmma:指定目錄下新增或删除檔案後,可以用mmma重新編譯。

            mmm指令 的編譯過程:

            build/core/main.mk(是android編譯系統的入口檔案)

           ->build/core/config.mk(會定好編譯類型和目标檔案)

                                                      ->build/core/definitions.mk(定義在編譯過程中用到的宏)

                                                      ->one_shot_makefile->build/core/package.mk(編譯apk庫檔案)

                                                                                                 ->build/core/java_library.mk(編譯java庫檔案)

                                                                                                 ->build/core/static_java_library.mk(編譯java靜态庫檔案)

                                                                                                 ->build/core/shared_library.mk->build/core/dynamic_library.mk->build/core/binary.mk->build/core/base_rules.mk

                                                                                                                                                                                         ( 計算一些基本變量的值,并建立一些基本的依賴規則)

                                                                                                                                                  ->build/core/static_library.mk(編譯.a靜态庫檔案)

                                                                                                                                                  ->build/core/executable.mk(編譯可執行檔案)

                                                                                                                                                  ->build/core/prebuilt.mk(編譯已經預編譯好的第三方庫檔案)

                                                                                                 ->build/core/makfile(有system.img、boot.img、recovery.img等鏡像檔案生成規則)

             環境變量one_shot_makefile中存放要編譯子產品的android.mk的檔案路徑,如果環境變量值為空,表示執行的是m或者make指令,會對android源代碼中的所有子產品進行編譯。

mm、mmm是類似的,都是用來編譯某些子產品。

使用這些編譯指令,首先需要在android根目錄下配置環境

[plain] ​​view plain​​ ​​copy​​

#source  build/envsetup.sh         要確定目前根目錄下有envsetup.sh腳本檔案  

#choose...                         對環境的選擇  

#cd (要編譯子產品所在的目錄)  

#mm(mma、mmm、mmma) -b -j2  2>&1    開始編譯子產品  

注:-b表示編譯子產品的所有檔案,-j2表示編譯的時候開啟兩個線程,2>&1表示将錯誤切換到輸出(輸入為0,輸出為1,錯誤為2)。    

 envsetup.sh腳本檔案裡包含vendorsetup.sh 、lunch、 m mm mmm的定義