2024年3月29日发(作者:辛玉泽)
老罗的新浪微博:/shengyangluo,欢迎关注!
在前文中,我们分析了Android编译环境的初始化过程。Android编译环境初始化
完成后,我们就可以用m/mm/mmm/make命令编译源代码了。当然,这要求每一个模
块都有一个文件。实际上是一个Makefile脚本,用来描述模
块编译信息。Android编译系统通过整合文件完成编译过程。本文就对
Android源代码的编译过程进行详细分析。
从前面Android编译系统环境初始化过程分析这篇文章可以知道,lunch命令其实
是定义在build/文件中的函数lunch提供的。与lunch命令一样,m、mm
和mmm命令也分别是由定义在build/文件中的函数m、mm和mmm提
供的,而这三个函数又都是通过make命令来对源代码进行编译的。事实上,命令m就是
对make命令的简单封装,并且是用来对整个Android源代码进行编译,而命令mm和
mmm都是通过make命令来对Android源码中的指定模块进行编译。接下来我们就先分
别介绍一下函数m、mm和mmm的实现,然后进一步分析它们是如何通过make命令
来编译代码的。
函数m的实现如下所示:
1. function m()
2. {
3. T=$(gettop)
4. if [ "$T" ]; then
5. make -C $T $@
6. else
7. echo "Couldn't locate the top of the tree. Try setting TOP."
8. fi
9. }
函数m调用函数gettop得到的是Android源代码根目录T。在执行make命令的
时候,先通过-C选项指定工作目录为T,即Android源代码根目录,接着又将执行命令m
指定的参数$@作为命令make的参数。从这里就可以看出,命令m实际上就是对命令
make的简单封装。
函数mm的实现如下所示:
1. function mm()
2. {
3. # If we're sitting in the root of the build tree, just do a
4. # normal make.
2024年3月29日发(作者:辛玉泽)
老罗的新浪微博:/shengyangluo,欢迎关注!
在前文中,我们分析了Android编译环境的初始化过程。Android编译环境初始化
完成后,我们就可以用m/mm/mmm/make命令编译源代码了。当然,这要求每一个模
块都有一个文件。实际上是一个Makefile脚本,用来描述模
块编译信息。Android编译系统通过整合文件完成编译过程。本文就对
Android源代码的编译过程进行详细分析。
从前面Android编译系统环境初始化过程分析这篇文章可以知道,lunch命令其实
是定义在build/文件中的函数lunch提供的。与lunch命令一样,m、mm
和mmm命令也分别是由定义在build/文件中的函数m、mm和mmm提
供的,而这三个函数又都是通过make命令来对源代码进行编译的。事实上,命令m就是
对make命令的简单封装,并且是用来对整个Android源代码进行编译,而命令mm和
mmm都是通过make命令来对Android源码中的指定模块进行编译。接下来我们就先分
别介绍一下函数m、mm和mmm的实现,然后进一步分析它们是如何通过make命令
来编译代码的。
函数m的实现如下所示:
1. function m()
2. {
3. T=$(gettop)
4. if [ "$T" ]; then
5. make -C $T $@
6. else
7. echo "Couldn't locate the top of the tree. Try setting TOP."
8. fi
9. }
函数m调用函数gettop得到的是Android源代码根目录T。在执行make命令的
时候,先通过-C选项指定工作目录为T,即Android源代码根目录,接着又将执行命令m
指定的参数$@作为命令make的参数。从这里就可以看出,命令m实际上就是对命令
make的简单封装。
函数mm的实现如下所示:
1. function mm()
2. {
3. # If we're sitting in the root of the build tree, just do a
4. # normal make.