在 Yocto 和 BitBake 配方(`.bb` 文件)中,有一些重要的**默认文件夹变量**用于指向构建过程中的不同目录。这些变量在开发和构建过程中非常重要,了解它们的含义可以帮助你正确地管理源代码、构建输出和依赖关系。下面是一些常用的目录变量及其解释:
---
### **常见目录变量及其含义**
1. **`${TOPDIR}`**
- **定义**:构建系统的顶级目录。
- **默认路径**:通常是你运行 `bitbake` 命令时所在的 `build/` 目录。
- **用途**:存放 Yocto 项目的所有构建文件和配置文件。
- **示例**:
```bash
/path/to/yocto/build
```
2. **`${WORKDIR}`**
- **定义**:每个配方(`.bb` 文件)在构建过程中使用的**工作目录**。
- **默认路径**:`${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}`
- `TMPDIR`:构建临时目录
- `PN`:配方名称
- `PV`:配方版本
- **用途**:存储解压后的源代码、构建产物和日志等。
- **示例**:
```bash
/path/to/yocto/build/tmp/work/x86_64-poky-linux/helloworld/1.0-r0/
```
3. **`${S}`**
- **定义**:源码目录,解压后的源代码通常放在 `${WORKDIR}` 中的一个子目录,并且 `S` 会指向该目录。
- **默认路径**:`${WORKDIR}/<解压后的源码目录>`
- **用途**:BitBake 在这个目录中运行 `do_compile()`、`do_configure()` 等构建任务。
- **示例**:
```bash
/path/to/yocto/build/tmp/work/x86_64-poky-linux/helloworld/1.0-r0/helloworld-1.0
```
4. **`${B}`**
- **定义**:构建目录。某些项目支持源代码和构建文件分开管理时,`B` 会用于存放构建文件。
- **默认路径**:通常等于 `${S}`,但可以自定义。
- **用途**:在这个目录下执行 `make` 等构建工具。
5. **`${D}`**
- **定义**:目标安装目录。在 `do_install()` 阶段,文件会安装到这个目录,然后打包工具会将其转移到最终包中。
- **默认路径**:`${WORKDIR}/image`
- **用途**:存放即将打包的文件和目录结构。
6. **`${TMPDIR}`**
- **定义**:Yocto 构建的临时目录,存放所有工作目录、构建缓存和构建产物。
- **默认路径**:`build/tmp/`
- **用途**:存储构建过程中的中间文件和临时数据。
7. **`${STAGING_DIR}`**
- **定义**:工具链和开发头文件等中间产物存放的目录。
- **用途**:用于交叉编译时需要的头文件、库和工具的缓存。
8. **`${PN}`**
- **定义**:配方名称(Package Name)。
- **用途**:通常表示 `.bb` 文件的名称,作为包管理中的名字。
9. **`${PV}`**
- **定义**:配方版本(Package Version)。
- **用途**:表示软件包的版本号,来源于配方文件的 `PV` 变量。
10. **`${PR}`**
- **定义**:配方修订版(Package Revision)。
- **用途**:用于跟踪相同版本的多次构建。
---
### **示例:配方文件使用这些变量**
```bb
DESCRIPTION = "Hello World Example"
LICENSE = "MIT"
SRC_URI = "file://helloworld-1.0.tar.gz"
S = "${WORKDIR}/helloworld-1.0"
do_compile() {
bbwarn "Current Directory: $(pwd)"
bbwarn "Source Directory: ${S}"
cd ${S}
oe_runmake
}
do_install() {
install -d ${D}/usr/bin
install -m 0755 ${S}/helloworld ${D}/usr/bin/
}
```
---
### **总结**
- `${TOPDIR}`:构建顶级目录。
- `${WORKDIR}`:配方的工作目录。
- `${S}`:源码目录。
- `${B}`:构建目录(通常等于 `${S}`)。
- `${D}`:安装目录,用于打包。
- `${TMPDIR}`:临时构建目录。
理解这些变量的含义和用途能帮助你在 Yocto 构建系统中更好地管理代码和构建产物。