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