product.mk-and-node_fns.mk

inherit 一个product definition 文件会在每个product 变量的当前值后面拼上被继承的product的相应变量的值。 
如果继承之后又给某些变量赋了新的值,则该变量之前的赋值和继承全部被新值覆盖掉。

在node_fns.mk中所谓的node是一个makefile。

import-nodes
  首先给每个node创建一个独一无二的context,在import-notes执行过程中创建的变量名都是以该上下文为前缀,
  这样保证import的不同node之间不会互相影响。 然后调用_import-nodes-inner 在一个上下文下导入node里
  定义的变量。 最后再把上下文里的变量move到node自身的上下文里。

_import-nodes-inner
  以第一参数为上下文引入一组node,每次引入一个node之前都给该node设置一个flag,表示该node在该上下文里已经
  被引入过。每个node在一个上下文里只会被引入一次。 对每个node,会调用_import-node,上下文和变量列表都保持
  不变。

_import-node
  以第一个参数为上下文引入一个node。 首先将node添加到_include_stack中,然后清空变量列表,包含node,再把
  变量列表拷贝到该node的子上下文里。 node里可能包含对inherit-product的调用。 inherit-product就是在变量列表里
  的每个变量后面附加上所要inherit的node,只不过在node之前拼上了一个INHERIT_TAG以方便后面做查找和扩展。
  然后调用get-inherited-nodes得出该node继承的全部node,并调用_import-nodes-inner把这些node也导入当前上下文。
  这会导致递归调用。  最后调用扩展所有的inherit tag。

_expand-inherited-values
  对变量列表里的每个变量,其包含INHERIT_TAG, 则将INHERIT_TAG替换成对应变量在被继承节点里的值。被继承
  之后,就把被继承的变量清空。 这样每个node里的变量只会被继承一次。  再加上每个node只会被导入一次,所以
  在inherit树中不应该出现交集。
阅读更多
上一篇01 linux shell 打印信息
下一篇Linux系统调用(syscall)原理(转)
想对作者说点什么? 我来说一句
关闭
关闭
关闭