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. @value 注入静态属性_SpringBoot使用@Value读取属性值
  2. 推荐一个Android开源项目-AisenWeiBo
  3. codeforces 551 C GukiZ hates Boxes
  4. mxnet基础到提高(49)-使用免费的云jupyter
  5. python爬虫-初步使用Scrapy分布式爬虫(爬取mcbbs整合包保存名称及主要mod),大爱MC
  6. C++ Primer 第10章 pair类型
  7. sybase 连接mysql_如何连接到Sybase SQL Anywhere数据库
  8. 原生JS实现淡入淡出效果(fadeIn/fadeOut/fadeTo)
  9. Vue学习笔记(2)(组件化开发)
  10. “Chrome不能访问更新服务器(错误:3)”的解决方法
  11. 第005讲 表单及表单控件,隐藏域
  12. 云计算核心技术的基本理解
  13. 稳压二极管(齐纳Zener二极管)的接法和应用详解
  14. 高通9008刷机大法,避坑指南,救砖前提
  15. STM32F103系列控制的OLED IIC 4针
  16. 【Netty基础】基于HTTP的文件下载Server实例
  17. php如何将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
  18. 一个30岁的人给你提个醒:不管收入多少,你一定要养成存钱习惯
  19. 个性404页面模板php,25个创意404页面,支持模板下载
  20. 读书笔记:《浪潮之巅:上》

热门文章

  1. python参数估计(一个总体均值)
  2. 一条挨踢老狗的2017年终总结
  3. Chrome 浏览器关闭第三方Cookie会导致内嵌的哔哩哔哩视频无法加载
  4. 基于Android的简易的二手物品交易app
  5. ddos源码 ntp_了解NTP DDOS攻击原理
  6. bootstrap制作一个优美的导航栏
  7. 沃邮箱的服务器设置,沃邮箱Outlook和Foxmail设置收发邮件
  8. 27岁转行学什么计算机技术,27岁转行学IT有前途吗?
  9. 毕业论文如何设置页码连续编页,页眉奇偶页不同?
  10. 智能家居小知识普及篇——智能家居技术有哪些劣势