當前位置:首頁 » 安卓系統 » android的makefile

android的makefile

發布時間: 2022-06-05 18:08:05

『壹』 Android Makefile中是 如何識別 TARGET_PRODUCT 的

, f Q2 W8 i$ Y# i# make showcommands嵌入式開發聯盟; h; Q4 ?. m, q _5 q# f4 N這實際上等價於下面的完整命令 (具體參見 build/core/envsetup.mk ) # TARGET_ARCH=arm TARGET_PRODUCT=generic TARGET_BUILD_TYPE=release make showcommands 可見,默認情況下編譯系統認為TARGET_PRODUCT 是generic 的arm,linux,winbond,nuvoton,w90p710,w90n745,開源,嵌入式,操作系統,嵌入式開發,嵌入式聯盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,6 p) P/ }+ a9 x" e' _/ ]8 l( H8 [, e那如何編譯特定產品的Android呢?arm,linux,winbond,nuvoton,w90p710,w90n745,開源,嵌入式,操作系統,嵌入式開發,嵌入式聯盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,7 n N* t# q" c9 c C% W這就需要查看Android Makefile是如何解析環境變數TARGET_PRODUCT的。 Android Makefile 的引用關系是這樣的mcuos.com1 b" z& i3 S. J5 J9 TMakefile -> build/core/main.mk -> build/core/config.mk -> build/core/envsetup.mk -> build/core/proct_config.mk嵌入式開發聯盟2 t1 D) I' n) x4 /+ Q# X! D在build/core/proct_config.mk 中編譯系統首先調用 build/core/proct.mk中定義的函數get-all-proct-makefiles ,來 遍歷整個vendor 的子目錄, 找到vendor下所有的 AndroidProcts.mk, 不同子目錄下的AndroidProcts.mk 中定義了不同的 PRODUCT_NAME, PRODUCT_DEVICE 等信息,(我們也可以通過 打開build/core/proct_config.mk 中的#$(mp-procts) 語句使控制台編譯的時候輸出所有proct 的信息) , 接著build/core/proct_config.mk 會調用resolve-short-proct-name 將TARGET_PRODUCT匹配的AndroidProcts.mk 中定義的 PRODUCT_DEVICE 賦值給TARGET_DEVICE。 有了這個TARGET_DEVICE, 再回到 build/core/config.mk, 會include $(TARGET_DEVCIE)/BoardConfig.mk board_config_mk := / $(strip $(wildcard /arm,linux,winbond,nuvoton,w90p710,w90n745,開源,嵌入式,操作系統,嵌入式開發,嵌入式聯盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,7 s6 h* H) @& B, X. [5 [' t" J& U $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk / vendor/*/$(TARGET_DEVICE)/BoardConfig.mk /- 我們只做簡潔、實用、專業的嵌入式開發技術論壇。2 L& f% E. T& M4 S) u))我們只做簡潔、專業的嵌入式開發技術論壇。5 }- ~6 j# s8 s/ a* v- iinclude $(board_config_mk)嵌入式開發聯盟, [. Z( H) L2 B; s, c而這個配置文件BoardConfig.mk 決定了目標系統編譯屬性,比如使用ALSA還是不是 GENERIC_AUDIO 等等 另外在這里TARGET_DEVICE 宏也決定了TARGET_DEVICE_DIR, 因為TARGET_DEVICE_DIR 取的是上面提到的BoardConfig.mk 的路徑。arm,linux,winbond,nuvoton,w90p710,w90n745,開源,嵌入式,操作系統,嵌入式開發,嵌入式聯盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,' ~( W" a( p& y9 g- n) A: cTARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk))) 當然Android 的Ob目標輸出也是由TARGET_DEVICE決定,見build/core/envsetup.mk TARGET_OUT_ROOT_release := $(OUT_DIR)/target我們只做簡潔、專業的嵌入式開發技術論壇。 v( |. V7 ^+ T+ G& mTARGET_OUT_ROOT_debug := $(DEBUG_OUT_DIR)/target TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))( ?. c1 J& d) o9 M. [TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/proctmcuos.com7 N! X' G9 T7 o& j+ }# |2 S. p# xPRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)嵌入式開發聯盟 P& ]2 q" C/ x: ?再回到 build/core/main.mk, 編譯系統接著做的一個件事情是,遍歷所有字目錄,找到所有Android.mk文件,並將這些Android.mk文件include 進來## Typical build; include any Android.mk files we can find.#subdir_makefiles := /我們只做簡潔、專業的嵌入式開發技術論壇。% T9 p" L4 e. O6 ?, h" @' @$(shell build/tools/findleaves.py --prune=out --prune=.repo --prune=.git $(subdirs) Android.mk)- 我們只做簡潔、實用、專業的嵌入式開發技術論壇。7 N. z& r* z; @! p5 n; {include $(subdir_makefiles)- 我們只做簡潔、實用、專業的嵌入式開發技術論壇。0 b% j5 a+ L2 E" r9 R3 v7 m我們再來看其中的 ./build/target/board/Android.mk ,對了它引用了

『貳』 android 系統中 怎麼查看makefile文件

看看有沒有vim, vi ,等文本編輯器,實在不行,裝個 終端,用命令 cat

『叄』 android mk文件怎麼打開

.mk後綴名文件類型:Makefile擴展名為.mk的文件是一個開發文件。Makefile規則如下所示目標:依賴文件列表命令列表1、目標通常是要產生的文件名稱,目標可以是可執行文件或obj文件,也可是一個動作的名稱.2、依賴文件是用來輸入從而產生目標的文件

『肆』 android 編譯驅動文件上層的makefile是怎麼查找下層的makefile

項目中需要將linux的應用程序放在android下面編譯。 以前的編譯用makefile,而android用android.mk 需要 linux makefile轉換為android.mk , 將生成 可執行文件、靜態庫、動態庫 的規則對應到android.mk 還有對應makefile引入的文件順序。

『伍』 android的makefile文件是如何編譯的

android編譯系統的makefile文件Android.mk寫法如下 (1)Android.mk文件首先需要指定LOCAL_PATH變數,用於查找源文件。

『陸』 android.mk makefile 有什麼區別

android.mk是Android操作系統編譯的時候使用的編譯規則文件
Makefile是Linux操作系統編譯的時候使用的編譯規則文件。
作用是一樣的,只是名稱不一樣罷了

『柒』 Android.mk/makefile 的ifeq和ifdef的區別

android.mk是Android操作系統編譯的時候使用的編譯規則文件 Makefile是Linux操作系統編譯的時候使用的編譯規則文件。 作用是一樣的,只是名稱不一樣罷了

『捌』 如何使用自己的makefile編譯android ndk項目

android ndk提供了一套自己的makefile管理方式,要將源碼項目移植到android平台,需要按照android的makefile規則編寫makefile,還要按android的規則部署源碼目錄,對一個有自己的makefile管理方法的大型項目來說,只是做一下makefile遷移工作就是一件很麻煩的事。
其實android ndk上的編譯說到底也就是交叉編譯,只要配置好交叉編譯工具鏈,使用原有的makefile也是可以編譯出在android運行的c、c++程序的。
以android-ndk-r4-crystax的ndk版本為例:
編譯器路徑 android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin
名稱前綴 arm-eabi-
頭文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include
庫文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib
你可以試一下上面的配置,如果編譯鏈接都沒有問題,可以adb push到android設備上運行看看,什麼結果?
有點崩潰,根本運行不起來,你也許想試試看android自帶的ndk例子,確實是能夠運行的,問題在哪兒呢?
只是正確配置了編譯器、頭文件、庫文件還不夠,還需要配置編譯、鏈接的參數,android例子中編譯鏈接的參數是什麼呢?你也許想深究一下android的makefile,可是不久你會發現那是更崩潰的事情,裡面用了很多的make腳本函數。其實android的makefile是可以把執行的詳細命令輸出來的,只要make的時候加上V=1即可。可以看到確實帶了很多參數
編譯參數:
-fpic
-mthumb-interwork
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-Wno-psabi
-march=armv5te
-mtune=xscale
-msoft-float
-mthumb
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-Wa,--noexecstack
-D__ARM_ARCH_5__
-D__ARM_ARCH_5T__
-D__ARM_ARCH_5E__
-D__ARM_ARCH_5TE__
-DANDROID
鏈接參數:

-nostdlib
-Bdynamic
-Wl,-dynamic-linker,/system/bin/linker
-Wl,--gc-sections
-Wl,-z,noreloc
-Wl,--no-undefined
-Wl,-z,noexecstack
-L$(PLATFORM_LIBRARY_DIRECTORYS)
crtbegin_static.o
crtend_android.o
這其中鏈接參數中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最關鍵的,android使用了自己的進程載入器,並且自定義了c運行時的啟動結束。難怪先前編譯的進程啟動不了。

熱點內容
動畫與編程 發布:2024-04-19 18:53:10 瀏覽:314
把自己家的wifi加密 發布:2024-04-19 18:47:23 瀏覽:573
顯卡資料庫 發布:2024-04-19 18:47:22 瀏覽:552
iosapp清除緩存 發布:2024-04-19 18:47:18 瀏覽:269
sql應用領域 發布:2024-04-19 18:42:56 瀏覽:36
訪問外網伺服器加速軟體 發布:2024-04-19 17:48:45 瀏覽:696
加密軟體對比 發布:2024-04-19 17:27:05 瀏覽:367
保密管理系統怎麼連接伺服器 發布:2024-04-19 17:26:59 瀏覽:18
廣州社保卡密碼激活在哪裡辦 發布:2024-04-19 17:21:18 瀏覽:368
編譯器和操作系統有關系嗎 發布:2024-04-19 17:20:28 瀏覽:274