variables这个小节里面是进行变量的定义,格式是dict。下面是一个例子:
'variables':{
'common_files':['src/common.cc','src/interface.cc'],
}
为了引用变量,我们可以这样编写:
<(common_files)
<@(common_files)
>(common_files)
>@(common_files)
总之引用变量必须加上(),同时在前面加上<,<@,>,>@的4种中一种前缀符号。关于前缀符号的含义, 会在后面的operator小节里面说明。
对于变量类型,一共分为3类:
- predefined variables //预定义变量
- user-defined variables //用户定义变量
- automatic variables //自动变量
预定义变量比如OS(系统环境),EXECUTABLESUFFIX(可执行文件后缀).用户自定义变量就不再赘述。
自动变量类似于Makefile里面的$@,$这样的变量,好比反射。比如在targetconditions部分的话,我们根据不同类型程序来做不同的condition:
'target_conditions':[
['_type=='static_library',{'sources':['func.cc']}]
]
这样对于target为staticlibrary都会联编func.cc这个文件了,自动变量是就是属性名称之前加上构成的。
存在自动变量非常必要。有时候我们在全局环境中,希望根据不同的条件来定义不同的行为,并且是在计算的同时在来做条件判断的。 这样就提出一个要求就是,条件判断部分必须有能力知道,当前到底在计算什么东西(反射)。