1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
SUMMARY = "Linux Bluetooth Stack Userland V5"
# 用於打包系統(例如opkg,rpm或dpkg)的二進制包的(72個字符或更少)摘要。
默認情況下,如果在配方中未設置DESCRIPTION,則使用SUMMARY值的定義描述變量。

DESCRIPTION = "Linux Bluetooth stack V5 userland components.
These include a system configurations, daemons, tools and system libraries."
# 提供給包管理器的包描述信息。如果未設置,說明將使用內容變量的值

HOMEPAGE = "http://www.bluez.org"
# 一般為配方的正在構建的軟件的主頁,從中可以獲取更多的軟件信息。

SECTION = "libs"
# 用於對軟件包進行分類,此變量用於軟件包管理程序。

LICENSE = "GPLv2+ & LGPLv2.1+"
# 配方的源文件許可列表.LICENSE需遵循以下規則:
#   (1)不要在單個許可名稱中使用空格
#   (2)當許可可選擇多個時,使用| 分隔許可證。
#   (3)當存在涵蓋源文件的不同部分的多個許可證時,使用與分隔許可證。
#   (4)您可以在許可名稱之間使用空格。
#   (5)對於標準許可,請使用元/文件/ common-licenses /中的LICENSE,
或者在meta / conf / licenses.conf中定義的具有SPDXLICENSEMAP標誌的LICENSE。
# 下面是一些例子:
# LICENSE =「LGPLv2.1 | GPLv3」
# LICENSE =「MPL-1&LGPLv2.1」
# LICENSE =「GPLv2 +」
# 第一個示例來自Qt的配方,源文件可以選擇LGPLv2.1或GPLv3許可。第二個示例來自Cairo,其中兩個LICENSE涵蓋源代碼的不同部分。
最後一個示例來自sysstat,它提供了一個單一的LICENSE。
# 您還可以針對每個包指定LICENSE以處理輸出組件具有不同的LICENSE情況。
例如,如果某個軟件的代碼根據GPLv2許可,但是文檔卻根據GNU 1.2自由文檔許可,其LICENSE可以被規定如下:
# LICENSE =「GFDL-1.2&GPLv2」
# LICENSE _ $ {PN} =「GPLv2」
# LICENSE _ $ {PN} -doc =「GFDL-1.2」

LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \
file://COPYING.LIB;md5=fb504b67c50331fc78734fed90fb0e09 \
file://src/main.c;beginline=1;endline=24;md5=9bc54b93cd7e17bf03f52513f39f926e"
# 配方文件構建的軟件源代碼中的許可文本的校驗和。
# 此變量跟蹤軟件源代碼文件的許可文本的更改。如果許可文本被更改,它將觸發構建失敗,這使開發人員有機會審查任何許可更改。
# 所有配方文件必須定義此變量(除非許可設置為「關閉」)。

DEPENDS = "udev libusb dbus-glib glib-2.0 libcheck readline"
# 列出配方的構建時的依賴項(即其他配方文件)。
在執行配方的配置任務之前,系統確保列出的所有依賴項都已構建,並且所有依賴項的內容已經保存在相應的 sysroot 中。
# 考慮這個簡單的例子,兩個名為「a」和「b」的配方生成類似命名的包。
在本示例中,DEPENDS語句出現在「a」配方中:
# DEPENDS =「b」
# 這裡,DEPENDS使得配方「a」的do_configure任務取決於配方「b」的do_populate_sysroot任務。
這意味著當配方「a」正在配置自身時,配方「b」放入sysroot的任何內容都必須可用。

PROVIDES += "bluez-hcidump"
# 用於提供配方的別名。默認情況下,配方自己的PN已經包含在PROVIDES列表中。
如果配方使用PROVIDES,則別名是配方的PN的同義詞,並可用於其他配方的DEPENDS中。
# 以配方文件libav_0.8.11.bb為例,libav_0.8.11.bb中的現狀提供語句如下:
# PROVIDES += 「libpostproc」
# 該現狀提供語句使得「libav」配方也被稱為「libpostproc」。

RPROVIDES_${PN} += "bluez-hcidump"
# 用於提供包名的別名列表。這些別名用於滿足其他包在構造期間和指定目標時(在RDEPENDS所指定的)的運行時依賴。
# 注意
# 程序包自身的名稱(PN)已隱含在其。RPROVIDES中列表
# 與所有程序包控制變量一樣,您必須始終將該變量與包名結合使用例如:
# RPROVIDES_${PN} =「widget-abi-2」

RCONFLICTS_${PN} = "bluez4"
# 用於指定與當前軟件包衝突的軟件包列表。請注意,如果沒有先刪除衝突的包,則不會安裝當前軟件包。
# 與所有包控制變量一樣,您必須始終將其與包名結合使用。例如:
# RCONFLICTS _ $ {PN} =「another_conflicting_package_name」
# OpenEmbedded構架系統使用的BitBake支持指定衝突的軟件包版本。
雖然語法因為軟件打包格式而異,但BitBake會隱藏這些差異。
下面是使用RCONFLICTS變量指定衝突的軟件包的一般語法:
# RCONFLICTS _ $ {PN} =「package(operator version)」
# 對於運營商,以下內容說明了當前軟件包與軟件包FOO的1.2或更高版本衝突:
# RCONFLICTS _ $ {PN} =「foo(> = 1.2)」

PACKAGECONFIG ??= "obex-profiles"
PACKAGECONFIG[obex-profiles] = "--enable-obex,--disable-obex,libical"
PACKAGECONFIG[experimental] = "--enable-experimental,--disable-experimental,"
# 該變量提供了在配方上啟用或禁用配方的 feature 的方法您可以在配方中指定的 feature 以及 feature 的參數來創建PACKAGECONFIG塊以下是基本的塊結構。:
# PACKAGECONFIG ?? =「f1 f2 f3 ...」
# PACKAGECONFIG [f1] =「--with-f1, - without-f1,build-deps-f1,rt-deps-f1」
# PACKAGECONFIG [f2] =「--with-f2, - without-f2,build-deps-f2,rt-deps-f2」
# PACKAGECONFIG [f3] =「--with-f3, - without-f3,build-deps-f3,rt-deps-f3」
# PACKAGECONFIG首先指定了一個空格分隔的要啟用的功能列表。
在feature列表下面,您可以通過提供最多四個按順序排列的參數來確定每個 feature的行為,這些參數之間用逗號分隔。
您可以省略。
任何您喜歡的參數,但必須保留逗號分隔符您必須按照以下順序指定 feature的參數:
#   1.如果啟用了該功能,則應將額外的參數添加到配置腳本參數列表(EXTRA_OECONF)。
#   2.如果禁用了該功能,應該將額外的參數添加到EXTRA_OECONF。
#   3.如果啟用了該功能,則應添加附加的構建時依賴關係(DEPENDS)。
#   4.如果啟用了該功能,應該添加附加的運行時依賴關係(RDEPENDS)。
# 以的librsvg中的PACKAGECONFIG塊為例。
在這個例子中,feature是croco,它通過三個參數來確定其行為。
# PACKAGECONFIG ?? =「croco」
# PACKAGECONFIG [croco] =「 - with-croco,- without-croco,libcroco」
# –with-croco和libcroco參數僅在啟用此feature時適用。
在這種情況下,–with-croco將被添加到配置腳本的參數列表中,而libcroco將被添加到DEPENDS中。
另一方面,如果您通過另一層中的.bbappend文件禁用該功能,則第二個參數–without-croco將會被添加到配置腳本中,而不是–with-croco。
基本的PACKAGECONFIG結構適用於創建塊或者更改塊。
如果要更改現有的PACKAGECONFIG塊,可以採用以下兩種方法之一:
# 1.附加文件:在您的層(layer)中創建一個名為recipename.bbappend的附加文件,並覆蓋PACKAGECONFIG的值。您可以完全覆蓋變量的值:
# PACKAGECONFIG =「f4 f5」
# 或者,您可以只添加變量的值:
# PACKAGECONFIG_append =「f4」
# 2.配置文件:如果您沒有修改local.conf或mydistro.conf文件,此方法與通過附加文件更改塊相同。
與之前描述的附加文件一樣,您可以完全覆蓋變量的值:
# PACKAGECONFIG_pn-recipename =「f4 f5」
# 或者,您可以只修改變量的值:
# PACKAGECONFIG_append_pn-recipename =「f4」

SRC_URI = "\
${KERNELORG_MIRROR}/linux/bluetooth/bluez-${PV}.tar.xz \
file://out-of-tree.patch \
file://set_device_class.patch \
file://init \
file://run-ptest \
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'file://0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch', d)} \
file://0001-tests-add-a-target-for-building-tests-without-runnin.patch \
"
# 用於指定源文件列表(本地或遠程)。
這個變量告訴OpenEmbedded構建系統哪些位要進入構建以及如何獲取它們。
例如,如果配方或附加文件只需要從Internet中提取壓縮後的源文件,則配方或附加文件只需使用單個SRC_URI條目即可。
另一方面,如果配方或附加文件需要同時獲取壓縮後的源文件,應用兩個補丁以及自定義文件,則配方或附加文件中的SRC_URI變量將包括四個條目。
# 以下列出了可用的URI協議:
#   file://-從本地獲取文件,這些文件通常是元數據附帶的文件。
其路徑相對於FILESPATH變量。因此,構建系統按順序從配方文件(.bb)或附加文件(.bbappend)所在的目錄的子目錄中搜索:

# 1 ${BPN} - 沒有任何特殊後綴或版本號的配方名稱。
# 2 ${BP} - $ {BPN} - $ {PV}。配方的名稱和版本,但沒有任何特殊的包名稱後綴。
# files - files目錄中的文件,一般配方或附加文件旁邊。
#   注意:
#   如果希望構建系統從append文件中選取通過SRC_URI語句指定的文件,則可以通過在append文件中使用FILESEXTRAPATHS變量來擴展FILESPATH變量。
#   bzr:// - 從Bazaar版本控制存儲庫獲取文件。
#   git:// - 從Git版本控制存儲庫獲取文件。
#   osc:// - 從OSC(OpenSUSE Build服務)版本控制存儲庫獲取文件。
#   repo:// - 從repo(Git)存儲庫獲取文件。
#   ccrc:// - 從ClearCase存儲庫獲取文件。
#   http:// - 使用http從Internet獲取文件。
#   https:// - 使用https從Internet獲取文件。
#   ftp:// - 使用ftp從Internet獲取文件。
#   cvs:// - 從CVS版本控制存儲庫獲取文件。
#   hg:// - 從Mercurial(hg)版本控制存儲庫獲取文件。
#   p4:// - 從Perforce(p4)版本控制存儲庫獲取文件。
#   ssh:// - 從安全shell獲取文件。
#   svn:// - 從Subversion(svn)版本控制存儲庫獲取文件。
# 針對SRC_URI的每個條目還有一些標準和特定的配方選項。以下是標準選項:
#   apply - 是否應用補丁。默認操作是應用補丁。
#   striplevel - 應用補丁時使用的級別。默認級別為1。
#   patchdir - 指定補丁的目錄。默認值為$ {S}。
# 以下是版本控制系統針對配方構建代碼的選項:
#   mindate - 只有在SRCDATE等於或大於mindat時才應用補丁
#   maxdate - 僅當SRCDATE不晚於mindate時才應用補丁。
#   minrev - 僅當SRCREV等於或大於minrev時才應用補丁。
#   maxrev - 僅當SRCREV不晚於maxrev時才應用補丁。
#   rev - 僅當SRCREV等於rev時才應用補丁。
#   notrev - 僅當SRCREV不等於rev時才應用補丁。
# 這裡還有一些值得一提的額外選項:
#   unpack - 控制是否解壓縮文件(如果是歸檔文件)。默認操作是解壓縮文件。
#   subdir - 將文件(或提取其內容)放置到WORKDIR的指定子目錄中。
此選項對於異常tarball或其他那些解壓後文件不放置在子目錄的歸檔文件非常有用。
#   name - 當SRC_URI中有多個文件時,指定與SRC_URI校驗相關的名稱。
#   downloadfilename - 指定存儲下載文件時使用的文件名。

S = "${WORKDIR}/bluez-${PV}"
# 配方文件中源文件解壓縮後在build目錄中的位置。 此位置在工作目錄(WORKDIR)中,且不是靜態的。
解壓縮後的源文件位置取決於配方名稱(PN)和配方版本(PV),如下所示:
# $ {WORKDIR} / $ {PN} - $ {PV}
# 例如,假設一個名為poky的源目錄頂級文件夾和一個poky / build的默認構建目錄。
在這種情況下,構建系統用於保留db配方源文件解壓縮後的目錄如下:
# poky / build / tmp / work / qemux86-poky-linux / db / 5.1.19-r3 / db-5.1.19

inherit autotools pkgconfig systemd update-rc.d distro_features_check ptest
# 用於指定在解析過程中應繼承的類。 該變量僅在配置文件中有效。

EXTRA_OECONF = "\
--enable-tools \
--disable-cups \
--enable-test \
--enable-datafiles \
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--enable-systemd', '--disable-systemd', d)} \
--enable-library \
"
# 指定用於configure 的參數。

# bluez5 builds a large number of useful utilities but does not
# install them. Specify which ones we want put into ${PN}-noinst-tools.
NOINST_TOOLS_READLINE ??= ""
NOINST_TOOLS_EXPERIMENTAL ??= ""
NOINST_TOOLS = " \
${NOINST_TOOLS_READLINE} \
${@bb.utils.contains('PACKAGECONFIG', 'experimental', '${NOINST_TOOLS_EXPERIMENTAL}', '', d)} \
"

do_install_append() {
install -d ${D}${INIT_D_DIR}
# 目標目錄。do_install任務在build目錄中安裝組件的位置。 此位置默認為:
# $ {WORKDIR} / image

install -m 0755 ${WORKDIR}/init ${D}${INIT_D_DIR}/bluetooth
# OpenEmbedded構建系統構建配方的工作目錄的路徑名。
此目錄位於TMPDIR目錄結構中,並且特定於正在構建的配方和正在構建的系統。
# WORKDIR目錄定義如下:

# $ {TMPDIR} / work / $ {MULTIMACH_TARGET_SYS} / $ {PN} / $ {EXTENDPE} $ {PV} - $ {PR}
# 1
# 實際目錄取決於幾個事情:
#   TMPDIR:最上層構建輸出目錄
#   MULTIMACH_TARGET_SYS:目標系統
#   PN:配方名稱
#   EXTENDPE:時間戳? - (如果PE未指定,這通常是大多數配方的情況,則EXTENDPE為空)
#   PV:配方版本
#   PR:配方修訂版
# 例如,假設源目錄最上層文件夾名稱為poky,默認構建目錄為poky/build,目標系統為qemux86-poky-linux。此外,假設您的配方名為foo_1.3.0-r0.bb。在這種情況下,構建系統用於構建包的工作目錄(WORKDIR)將如下所示:
# poky / build / tmp / work / qemux86-poky-linux / foo / 1.3.0-r0

install -d ${D}${sysconfdir}/bluetooth/
if [ -f ${S}/profiles/audio/audio.conf ]; then
# 配方文件中源文件解壓縮後在build目錄中的位置。
此位置在工作目錄(WORKDIR)中,且不是靜態的。 解壓縮後的源文件位置取決於配方名稱(PN)和配方版本(PV),如下所示:

install -m 0644 ${S}/profiles/audio/audio.conf ${D}/${sysconfdir}/bluetooth/
# 配置文件中源文件解壓縮後在build目錄中的位置。
此位置在工作目錄(WORKDIR)中,並且不是靜態的。解壓縮後的源文件位置取決於配置名稱(PN)和配方版本(PV) ,如下所示:
# $ {WORKDIR} / $ {PN} - $ {PV}
# 例如,假設一個名為poky的源目錄頂級文件夾和一個poky / build的默認構造目錄。
在這種情況下,構建系統用於保留db配方源文件解壓縮後的目錄如下:
# poky / build / tmp / work / qemux86-poky-linux / db / 5.1.19-r3 / db-5.1.19
fi
if [ -f ${S}/profiles/network/network.conf ]; then
install -m 0644 ${S}/profiles/network/network.conf ${D}/${sysconfdir}/bluetooth/
fi
if [ -f ${S}/profiles/input/input.conf ]; then
install -m 0644 ${S}/profiles/input/input.conf ${D}/${sysconfdir}/bluetooth/
fi

if [ -f ${S}/src/main.conf ]; then
install -m 0644 ${S}/src/main.conf ${D}/${sysconfdir}/bluetooth/
fi

if [ -f ${D}/${sysconfdir}/init.d/bluetooth ]; then
sed -i -e 's#@LIBEXECDIR@#${libexecdir}#g' ${D}/${sysconfdir}/init.d/bluetooth
fi

# Install desired tools that upstream leaves in build area
for f in ${NOINST_TOOLS} ; do
install -m 755 ${B}/$f ${D}/${bindir}
done
}

ALLOW_EMPTY_libasound-module-bluez = "1"
PACKAGES =+ "libasound-module-bluez ${PN}-testtools ${PN}-obex ${PN}-noinst-tools"

FILES_libasound-module-bluez = "${libdir}/alsa-lib/lib*.so ${datadir}/alsa"
FILES_${PN} += "${libdir}/bluetooth/plugins/*.so ${base_libdir}/udev/ ${nonarch_base_libdir}/udev/ ${systemd_unitdir}/ ${datadir}/dbus-1"
# 指定需要放入包中的目錄或文件的列表。
# 使用FILES變量時,必須與生成包的包名結合使用。然後提供一個空格分隔的文件或路徑列表,用於標識要包含在生成包中的文件。例如:

# FILES _ $ {PN} + =「$ {bindir} / mydir1 / $ {bindir} / mydir2 / myfile」
# 1
# 注意:
# 當為FILES變量指定文件或路徑時,最好使用相對路徑。
例如,使用sysconfdir而不是/etc,或 {bindir}而不是/ usr / bin。您可以在源目錄中的meta / conf / bitbake.conf文件的頂部找到這些變量的列表。
# 如果您提供的FILES變量中的一些文件是可編輯的,並且您知道它們不應該在軟件包管理系統(PMS)的軟件包更新過程中被覆蓋,您可以讓PMS識別這些文件,以便PMS不會覆蓋它們。
有關如何使PMS的識別這些文件,請參考CONFFILES變量。

FILES_${PN}-dev += "\
${libdir}/bluetooth/plugins/*.la \
${libdir}/alsa-lib/*.la \
"

FILES_${PN}-obex = "${libexecdir}/bluetooth/obexd \
${exec_prefix}/lib/systemd/user/obex.service \
${datadir}/dbus-1/services/org.bluez.obex.service \
"
SYSTEMD_SERVICE_${PN}-obex = "obex.service"
# 如果配方繼承了systemd類,那麼此變量為配方生成包的指定了systemd的服務名稱。
當您在配方中使用此文件時,請指定包名,以保證變量值應用到目標包上。下面是一個來自connman配方中的例子:
# SYSTEMD_SERVICE _ $ {PN} =「connman.service」

FILES_${PN}-testtools = "${libdir}/bluez/test/*"

def get_noinst_tools_paths (d, bb, tools):
s = list()
bindir = d.getVar("bindir", True)
for bdp in tools.split():
f = os.path.basename(bdp)
s.append("%s/%s" % (bindir, f))
return "\n".join(s)

FILES_${PN}-noinst-tools = "${@get_noinst_tools_paths(d, bb, d.getVar('NOINST_TOOLS', True))}"

RDEPENDS_${PN}-testtools += "python python-dbus python-pygobject"
# 列出包的運行時依賴關係(即其他程序包),依賴包必須先安裝才能使當前構建的程序包正常運行。
如果在構建過程中找不到此列表中的依賴包,構建將會失敗。
# 當在配方中使用RDEPENDS變量時,說明當前配方的do_build任務取決於特定包。
下面以兩個名為「a」和「b」的配方為例,它們生成類似命名的IPK包。在此示例中,RDEPENDS語句顯示在「a」配方中:
# RDEPENDS _ $ {PN} =「b」
#
# 這裡,RDEPENDS使得配方「a」的do_build任務取決於配方「b」的do_package_write_ipk任務。
這意味著當構建配方「a」時,「b」的包文件必須可用。更重要的是,以包管理器理解的方式,包「a」將被標記為依賴於包「b。
# 在RDEPENDS中列出的包的名稱必須是其他包的名稱 - 它們不能是配方名稱。
雖然軟件包名稱和配方名稱通常匹配,但重要的是,您必須在RDEPENDS變量中提供軟件包名稱。
有關如何從配方創建軟件包的示例,請參考PACKAGES變量。
# 因為RDEPENDS變量適用於正在構建的包,所以您應該始終使用帶有附加的包名稱的形式的變量名。
例如,假設您正在構建一個依賴於perl包的開發包。在這種情況下,您將使用以下RDEPENDS語句:
# RDEPENDS _ $ {PN} -dev + =「perl」
#
# 在該示例中,RDEPENDS變量具有$ {PN} -dev包名稱作為變量名的一部分。
# 附加到RDEPENDS變量的程序包,在通過類(如debian)重命名之前,其包名必需同PACKAGES命名空間中的名稱一致。
# 在許多情況下,您不需要使用RDEPENDS顯式添加運行時的依賴包,因為配方會自動運行某些處理:
# shlibdeps:如果運行時的程序包包含共享庫(.so),構建過程中將處理庫以及與其動態鏈接的其他庫,並在創建運行時的包時將這些庫添加到RDEPENDS。
# pcdeps:如果程序包含有pkg-config文件,則構建過程中將使用此文件將條目添加到RDEPENDS變量以創建運行時的程序包。
# OpenEmbedded構建系統使用的BitBake支持依賴指定版本的特性。
雖然語法因軟件包打包格式而異,但BitBake會隱藏這些差異。以下是使用RDEPENDS變量指定依賴軟件包版本的一般語法:

# RDEPENDS _ $ {PN} =「package(operator version)」
# 1
# 對於operator,您可以指定以下內容:
# =,<,>,<=,>=
#
# 例如,以下內容說明配方運行時依賴軟件包foo的1.2或更高版本:
# RDEPENDS _ $ {PN} =「foo(> = 1.2)」
#
# 有關構建時依賴的內容,請參考DEPENDS變量


SYSTEMD_SERVICE_${PN} = "bluetooth.service"
INITSCRIPT_PACKAGES = "${PN}"
# 包含初始化的軟件包列表。 如果有多個包,則應該使用帶有附加的包名稱的形式的變量名。
# 只有配方繼承update-rc.d.bbclass,此變量才可使用。該變量是可選的且默認為值為PN。
INITSCRIPT_NAME_${PN} = "bluetooth"
# 安裝到$ {sysconfdir} /init.d的初始化腳本名。
# 只有配方繼承update-rc.d.bbclass,此變量才可使用。 此變量是必需的。

EXCLUDE_FROM_WORLD = "1"
# 將當前配方從BitBake world 中排除。
在執行BitBake world期間,BitBake會定位,解析和構建在bblayers.conf配置文件中公開的每一層的配方。
# 如果需要BitBake world不構建當前配方,請在配方中將EXCLUDE_FROM_WORLD變量設置為「1」。
# 注意:
# 如果有其他配方依賴於設置EXCLUDE_FROM_WORLD的值為1的配方,則此配方仍然可能被BitBake world構建。
將EXCLUDE_FROM_WORLD設置為1,僅確保配方未顯式添加到BitBake world的構建目標列表中。

do_compile_ptest() {
oe_runmake buildtests
}

do_install_ptest() {
cp -r ${B}/unit/ ${D}${PTEST_PATH}
rm -f ${D}${PTEST_PATH}/unit/*.o
}

poky/meta/conf/bitbake.conf + build/conf/local.conf定义了bb文件里面的路径引用

sysroot_descdir,yocto会自动把当前bb想要传递出去的头文件以及库文件放入此目录

recipe-sysroo,yocto会自动把当前bb DEPENDS的bb文件的sysroot_descdir文件夹里的头文件以及库文件拷贝到此目录