product.mk-and-node_fns.mk
2017-06-23 14:08
369 查看
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树中不应该出现交集。
如果继承之后又给某些变量赋了新的值,则该变量之前的赋值和继承全部被新值覆盖掉。
在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树中不应该出现交集。
相关文章推荐
- Android Build System ---- how to add your product and board config *.mk
- android编译分析之5—node_fns.mk
- Android Build System ---- how to add your product and board config *.mk
- Android Build System ---- how to add your product and board config *.mk
- Android Build System ---- how to add your product and board config *.mk
- Android Build System - how to add your product and board config *.mk[转]
- Android Build System ---- how to add your product and board config *.mk
- Android Build System ---- how to add your product and board config *.mk
- Determine whether the product of a and b is even or odd.
- Invalid configuation file. File "**********" was created by a VMware product with more feature than this version of VMware Workstation and cannot be
- Creating a basic site with Node.js and Express
- A Simple MVC Framework With Node and Express
- Hadoop问题:There are 0 datanode(s) running and no node(s) are excluded in this operation.
- PRODUCT_COPY_FILES不能写到自己的Android.mk中吗?
- Node(11) Event Driven and Non-blocking
- Node(21) DNS- lookup and resolve
- How to Install and Run a node.js App on Centos 6.4 64bit
- warn: Appium support for versions of node < 0.12 has been deprecated and will be removed in a future
- How to install Node.js, npm and modules
- Software Product Line Engineering: Foundations, Principles and Techniques