当前位置:首页 » 安卓系统 » 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-05-02 13:25:16 浏览:962
安卓网页图片不显示怎么办 发布:2024-05-02 13:16:00 浏览:673
虚拟机搭建linux 发布:2024-05-02 13:02:48 浏览:186
哈弗f7配置怎么使用 发布:2024-05-02 12:53:14 浏览:575
psv重新构建数据库 发布:2024-05-02 12:43:53 浏览:792
农行对公密码器的凭证号码在哪里 发布:2024-05-02 12:38:55 浏览:890
双子星脚本 发布:2024-05-02 12:26:01 浏览:142
域名如何将程序部署到服务器 发布:2024-05-02 12:25:38 浏览:948
命令行编译lex 发布:2024-05-02 12:17:25 浏览:61
linux读u盘 发布:2024-05-02 11:49:37 浏览:782