1.我们还需要一些辅助信息的帮助,直接去分析,似乎有些困难。
这里,我把make cfg所执行的操作全部记录下来,然后打开这个文件去查看这个过程。(第2行)
2.打开这个文件,发现总共45条命令,那我截图下来。结合之前的makefile,一一来看看。
2.1第1-4行就不解释了,前面的文章稍微讲了一下。
2.2.第5行,创建目录,前面的文章也提过。
2.3 第6行,前面也提过,两条命令,进入到目录,执行pmoncfg程序。(这个部分晚点讲,因为我也没仔细看)。
2.4 第7行,提示创建一个命令,看到第13行的时候,用到了makedepend。(晚点看)
makedepend命令是我们自己安装的。
$ sudo apt-get install xutils-dev
makedepend [ -DName=Def] [ -DName] [ -IIncludeDir ] [ -YIncludeDir ] [ -a ] [ -fMakeFile ] [ -oObjSuffix ] [ -pObjPrefix ] [ -sString ] [ -wWidth ] [ -v] [ -m ] [ —Options— ] SourceFile ...
makedepend命令按顺序读取每个 soucefile,并且像C预处理器那样对其进行语法分析。
它处理所有的#include、#define、#undef。。。等伪指令来确定在编译中需要用到哪些#include伪指令。
任何#include伪指令都能引用含有其他#include伪指令的文件,并且同样在那些文件中进行语法分析。
SourceFile直接或间接包含每个文件都被makedepend称为一个“相关性”。
2.5 第8行,前面的文章提过,进入到指定的目录,有两个目标,depend和clean
找到depend目标:在libc文件夹中的Makefile.inc文件中。61行看到了提示语句。
2.6 第9行,进入到指定目录
执行该目录中Makefile
2.7 第10行,按照指定,创建目录树。
对应上图中64行目标的执行
2.8 第11行,对应上图的打印提示
2.9 第12行,切换到指定的目录
make命令执行该目录中的Makefile,目标是depend (上图62行指定的)
在该文件中包含tools/scripts/pmon.lib.gmk (该文件确实有depend目标。)
执行这个目标。 这样命令就对上了。
2.10 第13行,执行makedepend命令,(应该不是编译这些c文件),同时可以看到列出来的所有的c文件应该就是最后形成libc.a所需要的所有的c文件。
执行的是make depend这样的命令。
调用的是上图74行的命令。这里相当于把所有的.c文件进行了关联检查。
3.继续之后的指令14-22。
3.1 第14行,离开这个目录
3.2 第15行,创建目录树
3.3 第16行,打印提示
3.4 第17行,进入libm目录 ,并执行该目录中Makefile文件
3.5 第18行,执行make depend
3.6 第19行,离开这个目录
3.7 第20行,创建目录树
3.8 第21行,打印提示
3.9 第22行,进入libz目录 ,并执行该目录中Makefile文件
4. 继续之后的命令23-25
4.1 第23行,执行make depend
4.2 第24行,离开这个目录
4.3 第25行,看这样子是执行了根目录下Makefile.inc中的depend目标。
5.继续之后的代码26
5.1 这一行文件非常多,跟4.3说明的一样。
6. 继续之后的代码27-30
6.1 第27-30行,在libc目录中执行make clean指令
7.继续之后的代码31
8.继续之后的代码32-37
进入libm目录,执行make clean
9.继续38-45.结束
9.1 38-42 行进入libz目录,执行make clean
9.2 44-45 离开指定的目录,上面进行的所有的编译都是在该目录中,所有的.o文件也在该目录中。
以上就是make cfg 的全部过程。
我也是接触不久,难免会有一些错误。欢迎大神指正。