上一篇:https://www.cnblogs.com/zhangzhiwei122/p/16025859.html
5.10.0 - 下面分析中 使用的行号,都是 参考 这个 版本的 Makefile 。
在线浏览: https://lxr.missinglinkelectronics.com/linux/Makefile
在源码文件夹下面建立一个build 文件夹,然后使用 O=build
mkdir build
make O=build
前文中提到两个变量 sub_make_done need-sub-make 来控制 首次使用 和 最后一次使用。
依据这两个变量,将整个 Makefile 文件 分为 3 部分。
需要注意,用两个变量控制,不是一个变量控制,则 首次 和 最后一次 这两个概念 就不是 对立的,即可以同时存在。
在 首次使用 部分,黄色的 37 ~ 188 中,没有设置 need-sub-make 为 1。
见前文,need-sub-make 被设置为1 的3中情况,若这三种情况都没达到,则need-sub-make 就是空的。
则,下面的 绿色的191 ~ 1948 也就被使用了。
这时,整个Makefile 就可以看作一个 部分,即 黄色部分和绿色部分都 可见。
在 首次使用 部分,黄色的 37 ~ 188 中, 有设置 need-sub-make 为 1。则 下面的 191 ~ 1948 部分都被忽略。相当于第一次make 可见的只有 灰色和黄色部分。
由于 首次使用时,export sub_make_done=1 ,第二次启动make工具,有这个变量,37 ~ 188 部分内容,对第二次make工具不可见。
由于need-sub-make 没有被export ,所以第二次启动的 make 工具中,这个变量为空。 191 ~ 1948 部分内容对第二次make工具可见
这 是我们的使用场景中的情况
第一次make 工具 可见 37 ~ 188 部分内容,abs_objtree和abs_srctree 不相同,导致 设置了 need-sub-make=1,导致 191 ~ 1948 部分内容不可见。然后 启动第二个make工具,
第二个make 工具仅仅可见通用部分和 191 ~ 1948 部分内容