我已经看到在多个 yocto 配方中使用了以下安装命令
install -d ${D}${libdir}
Run Code Online (Sandbox Code Playgroud)
我知道 install 命令及其用途,但是我无法理解 ${D} 变量的用途,因为它通常没有在配方中定义。有人可以解释这个shell变量的用途吗?
Ste*_*itt 12
该${D}变量允许正在构建的软件安装在其实际目标以外的目录中。例如,您可能将软件配置libdir为/usr/lib,但这是针对目标设备的;当您在构建系统上运行安装时,您不希望将新构建的文件实际安装在/usr/lib. 所以你创建一个临时目录并安装在那里:
mkdir /tmp/yocto-target
make install D=/tmp/yocto-target
Run Code Online (Sandbox Code Playgroud)
这样文件就会/tmp/yocto-target/usr/lib以此类推。然后,您可以/tmp/yocto-target使用您喜欢的任何工具存档所有内容,删除/tmp/yocto-target前缀,将存档复制到目标设备并在那里安装其内容。
在其他构建系统中,使用该DESTDIR变量的原因相同。
${D}是 Yocto 配方使用的路径的通常顶部,该配方安装属于此配方生成的包的文件。这些目录下${D}的文件由构建系统扫描以包含到包中(如 RPM 文件),并包含在所谓的 sysroot 树中,其他包使用的文件(例如库和头文件)位于其中。此扫描有一些默认规则,并且可以扩展这些规则。建议在${D}尽可能多的情况下使用这些 Yocto 默认路径,以从 Yocto 的内置机制中受益。
${libdir}:在bitbake.conf默认为被定义${exec_prefix}/lib,其是/usr/lib通过默认,在同一个文件中定义。
install -d ${D}${libdir}
Run Code Online (Sandbox Code Playgroud)
最后,这个“安装”shell 命令只是创建一个目录,在其中保存文件(例如通过 do_install),最终应该安装在/usr/lib目标下。
${D}/a/b/cfor filec只是用于 Yocto 打包的中间路径,${D}当相同的文件c在目标文件系统上时被“切除” 。因此,例如${D}/a/b/c将在/a/b/c目标上。
${D}默认在poky/meta/conf/bitbake.conf 中定义为:
TMPDIR = "${TOPDIR}/tmp"
BASE_WORKDIR ?= "${TMPDIR}/work"
WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
D = "${WORKDIR}/image"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11557 次 |
| 最近记录: |