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基本语法相关推荐

  1. yocto 知:BitBake用户手册

    BitBake 用户手册 作者:Richard Purdie, Chris Larson, and Phil Blundell 译者:maminjie BitBake社区 bitbake-devel@ ...

  2. BitBake用户手册

    写在前面的废话:工作驱动,Yocto Project拔草,后面有心情就接着翻其他文档 src_url:https://www.yoctoproject.org/docs/3.1.2/bitbake-u ...

  3. 【Note4】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,peci,软连接

    文章目录 1.shell语法:Shell是用C语言编写的程序,它是用户使用Linux的桥梁,硬件>内核(os)>shell>文件系统 1.1 变量:readonly定义只读变量,un ...

  4. 【JavaScript总结】JavaScript语法基础:BOM

    DOM是文档对象模型,操作对象是文档 window.document,和浏览器没有直接关系 DOM常用事件: onload,onbeforeunload, onunload onclick,ondbl ...

  5. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  6. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  7. 第二天:Vue基础语法

    1.计算属性的setter和getter 每个计算属性都有setter和getter 一般来说用到setter较少,都不希望数据被改动,所以只用getter时也有缩写 <!DOCTYPE htm ...

  8. LLVM语法语义指令特性

    LLVM语法语义指令特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数,全局变 ...

  9. LLVM一些编程语法语义特性

    LLVM一些编程语法语义特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数.全 ...

  10. LLVM一些语法规则

    LLVM一些语法规则 LLVM文档 LLVM编译器基础架构支持广泛的项目,从工业强度编译器到专门的JIT应用程序,再到小型研究项目. 同样,文档分为几个针对不同受众的高级别分组: LLVM设计概述 几 ...

最新文章

  1. 年终总结,程序员票选最喜欢的编程语言花落谁家?
  2. efcore调用函数_EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
  3. 相似图片检测:感知哈希算法之aHash,dHash,pHash的Python实现
  4. asp多重查询的解决方案
  5. PMCAFF微分享 | 阿檬:如何设计好工具型软件?产品经理必备技能
  6. KTV阶段项目告一段落,让我们张开双臂迎接新阶段吧!!
  7. 嵌套地狱_解决嵌套业务逻辑_使用Js的对象_避免数组嵌套---SpringCloud Alibaba_若依微服务框架改造_ElementUI---工作笔记016
  8. c语言中乱显示数字,同时显示不同的数字
  9. Eclipse-习惯设置/快捷键/插件
  10. 遗传算法c语言程序二次方程,遗传算法的c语言程序.doc
  11. AKS解决方案架构设计
  12. 个人IP网站源码 适合做个人主页和工作室网站
  13. useragent 全集 firefox插件 useragetn switch 使用
  14. GitHub代码上传失败的解决方法
  15. android代码禁用软键盘,如何强制禁用软键盘
  16. L1-009 N个数求和 (20 分)
  17. 学习java可以做什么?
  18. 记一次笔试遇到leetcode原题却没a出来的经历
  19. AD软件生成gerb文件方法参考
  20. matlab 圆角,rectangle函数MATLAB matlab中rectangle画圆角矩形

热门文章

  1. 慢就是快的人生哲理_关于慢的境界的哲理美文
  2. [论文阅读笔记47]ZEN-BERT-based Chinese (Z) text encoder Enhanced by N-gram representations
  3. 计算机无法验证签名,win7系统无法验证文件数字签名的解决方法
  4. 带t2芯片的mac装linux,制作macOS系统盘超级简单,以及T2芯片的安装方法
  5. 智能陈桥五笔输入法 for linux,科技教程:在Linux下安装陈桥五笔输入法
  6. python 线性插值处理_详解Python实现线性插值法
  7. 好心情平台:30分钟就可改善抑郁情绪的运动处方
  8. 已知均数及标准差,如何生成模拟原始数据?
  9. 2021年应用市场放假安排
  10. FFmpeg进阶:给视频添加文字水印