Bitbake基本语法
Bitbake脚本,就是bb,bbappend,bbclass,conf,还有inc文件。
编写这些脚本时的基本语法如下:
1,变量赋值
VARIABLE = "value"
或者
VARIABLE = ‘ I have a " in my value ’
可以对一个变量多次赋值。
2,行合并
使用反斜线来换行。
比如对FOO变量赋值:
FOO = “bar \
baz \
qaz”
3,变量扩展
A = “aval”
B = "pre${A}post"
B的值为“preavalpost”
如果扩展的变量不存在,则就是用原本字符串。比如:
BAR = “${FOO}”
如果FOO变量不存在,那BAR变量的值就是后面这个字符串。
在使用变量扩展时,每次引用这个变量时,再根据当前值进行扩展。比如:
A = "${B} baz"
B = "${C} bar"
C = "foo"
*At this point, ${A} equals "foo bar baz"*
C = "qux"
*At this point, ${A} equals "qux bar baz"*
B = "norf"
*At this point, ${A} equals "norf baz"\*
4,设置默认值
A ?= "aval"
如果在解析BB脚本时,A没有被定义或赋值,则使用上面的默认值。
注:对同一个变量多次设置默认值,只第一个有效。
5,设置弱默认值
A ??= "somevalue"
和普通的设置默认值不同,弱默认值优先级最低。
会在变量没有赋值和设置默认值时起作用,并且赋值发生在脚本解析完成前。
多个设置弱默认值,只有最后一个生效。
6,变量立即扩展
上面说到给某个变量赋值时可以使用变量扩展,扩展是在使用这个变量时才发生。
所以赋值变量的值随着扩展变量的值的变化而变化。
使用立即扩展,则会在当前立刻扩展变量值,并进行赋值,此后值就不会随扩展变量变化而变化。
T = "123"
A := "test ${T}"
T = "456"
这时A的值是“test 123”.
B := "123 ${C}"
C = "cval"
C := "${C}append"
B的值是“123 cval”,C的值是“cvalappend”。
因为使用立即扩展时,如果遇到未定义的变量,会暂时保留扩展操作。
7,Appending += 和 prepending =+
B = "bval"
B += "additionaldata"
C = "cval"
C =+ "test"
B的值是“bval additionaldata”,C的值是“test cval”。
注意有空格。
8,Appending .= 和 prepending =.
和上面一样,但没有空格。
9,Appending and Prepending (Override Style Syntax)
使用此方法来添加前缀或后缀,没有空格。
同上面的添加前后缀和立刻扩展赋值不同,此方法的赋值是在变量展开时才发生。
B = "bval"
B_append = " additional data"
C = "cval"
C_prepend = "additional data "
B的值是“bval additional data”, C的值是“additional data cval”。
10,删除某个值(Override Style Syntax)
当变量的值是空格分隔的一系列字符串时,可以指定删除一部分,原来的空格还会保留。
比如:
FOO = "123 456 789 123456 123 456 123 456"
FOO_remove = "123"
FOO_remove = "456"
FOO2 = " abc def ghi abcdef abc def abc def def"
FOO2_remove = "\ def \ abc \ ghi \ "
操作完成后,FOO的值是“ 789 123456 ”
FOO2的值是“ abcdef”
和“_append” , "_prepend"一样,"_remove"也是在变量展开式才生效。
11,Override Style Operation Advantage
考虑下面的情况,有一个foo.bbclass文件,里面要给一个变量加值:
foo.bbclass:
FOO += "val"
有一个recipe要使用这个bbclass文件:
inherit foo
FOO = "initial"
这时FOO的值就不是“initial val”,而是“initial”。
如果修改成_append:
FOO_append = " val"
则最终的值就是“initial val”。
12,Variable Flag Syntax
这个语法特性是BitBake为了给变量添加属性的一种特殊实现。
直接使用,不需要定义。比如:
FOO[a] = "abc"
FOO[b] = "123"
FOO[a] += "456"
变量FOO有两个flag,[a]和[b],值分别为"abc"和“abc 456”。
通常使用方式是给变量添加文档注释:
CACHE[doc] = "The directory holding the cache of the metadata."
13,嵌入Python变量扩展
比如调用func来给FOO赋值:
FOO = “${@func( )}”
举例:
DATE = "${@time.strftime('%Y%m%d',time.gmtime())}"
14,注销变量
使用unset关键字,从bitbake的内部字典移除某个变量。
unset VARIABLE
15,给路径赋值
注意不要使用“~”,并不会解析成home路径。
要提供全路径来赋值:
BBLAYERS ?= " \
/home/scott-lenovo/LayerA \
"
Bitbake基本语法相关推荐
- yocto 知:BitBake用户手册
BitBake 用户手册 作者:Richard Purdie, Chris Larson, and Phil Blundell 译者:maminjie BitBake社区 bitbake-devel@ ...
- BitBake用户手册
写在前面的废话:工作驱动,Yocto Project拔草,后面有心情就接着翻其他文档 src_url:https://www.yoctoproject.org/docs/3.1.2/bitbake-u ...
- 【Note4】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,peci,软连接
文章目录 1.shell语法:Shell是用C语言编写的程序,它是用户使用Linux的桥梁,硬件>内核(os)>shell>文件系统 1.1 变量:readonly定义只读变量,un ...
- 【JavaScript总结】JavaScript语法基础:BOM
DOM是文档对象模型,操作对象是文档 window.document,和浏览器没有直接关系 DOM常用事件: onload,onbeforeunload, onunload onclick,ondbl ...
- 【JavaScript总结】JavaScript语法基础:JS编码
运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...
- 【JavaScript总结】JavaScript语法基础:数据类型
------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...
- 第二天:Vue基础语法
1.计算属性的setter和getter 每个计算属性都有setter和getter 一般来说用到setter较少,都不希望数据被改动,所以只用getter时也有缩写 <!DOCTYPE htm ...
- LLVM语法语义指令特性
LLVM语法语义指令特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数,全局变 ...
- LLVM一些编程语法语义特性
LLVM一些编程语法语义特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数.全 ...
- LLVM一些语法规则
LLVM一些语法规则 LLVM文档 LLVM编译器基础架构支持广泛的项目,从工业强度编译器到专门的JIT应用程序,再到小型研究项目. 同样,文档分为几个针对不同受众的高级别分组: LLVM设计概述 几 ...
最新文章
- 年终总结,程序员票选最喜欢的编程语言花落谁家?
- efcore调用函数_EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
- 相似图片检测:感知哈希算法之aHash,dHash,pHash的Python实现
- asp多重查询的解决方案
- PMCAFF微分享 | 阿檬:如何设计好工具型软件?产品经理必备技能
- KTV阶段项目告一段落,让我们张开双臂迎接新阶段吧!!
- 嵌套地狱_解决嵌套业务逻辑_使用Js的对象_避免数组嵌套---SpringCloud Alibaba_若依微服务框架改造_ElementUI---工作笔记016
- c语言中乱显示数字,同时显示不同的数字
- Eclipse-习惯设置/快捷键/插件
- 遗传算法c语言程序二次方程,遗传算法的c语言程序.doc
- AKS解决方案架构设计
- 个人IP网站源码 适合做个人主页和工作室网站
- useragent 全集 firefox插件 useragetn switch 使用
- GitHub代码上传失败的解决方法
- android代码禁用软键盘,如何强制禁用软键盘
- L1-009 N个数求和 (20 分)
- 学习java可以做什么?
- 记一次笔试遇到leetcode原题却没a出来的经历
- AD软件生成gerb文件方法参考
- matlab 圆角,rectangle函数MATLAB matlab中rectangle画圆角矩形
热门文章
- 慢就是快的人生哲理_关于慢的境界的哲理美文
- [论文阅读笔记47]ZEN-BERT-based Chinese (Z) text encoder Enhanced by N-gram representations
- 计算机无法验证签名,win7系统无法验证文件数字签名的解决方法
- 带t2芯片的mac装linux,制作macOS系统盘超级简单,以及T2芯片的安装方法
- 智能陈桥五笔输入法 for linux,科技教程:在Linux下安装陈桥五笔输入法
- python 线性插值处理_详解Python实现线性插值法
- 好心情平台:30分钟就可改善抑郁情绪的运动处方
- 已知均数及标准差,如何生成模拟原始数据?
- 2021年应用市场放假安排
- FFmpeg进阶:给视频添加文字水印