安装命令中的 ${D} 变量

安装命令中的 ${D} 变量

我在多个 yocto 食谱中看到了以下安装命令

install -d ${D}${libdir}

我知道安装命令及其用途,但是我无法理解 ${D} 变量的用途,因为它通常在配方中没有定义。有人可以解释一下这个 shell 变量的用途吗?

答案1

${D}变量允许将正在构建的软件安装在其实际目标之外的目录中。例如,您可以将软件配置为libdir/usr/lib但这是针对目标设备的;当您在构建系统上运行安装时,您不希望新构建的文件实际安装在 中/usr/lib,您希望将其放置在隔离的位置,以便可以轻松识别它们并将其复制到目标系统。因此,您创建一个临时目录并在那里安装:

mkdir /tmp/yocto-target
make install D=/tmp/yocto-target

这样文件最终会出现/tmp/yocto-target/usr/lib等等。然后,您可以/tmp/yocto-target使用您喜欢的任何工具存档所有内容,删除/tmp/yocto-target前缀,将存档复制到目标设备并将其内容安装在那里。

在其他构建系统中,DESTDIR使用该变量的原因相同。

答案2

${D}是 Yocto 配方使用的路径的通常顶部,其中配方安装属于该配方生成的包的文件。下面的这些目录${D}由构建系统扫描,以查找要包含到包中(如 RPM 文件)的文件,以及包含在所谓的 sysroot 树中的文件(例如库和头文件)所在的位置,供其他包使用。此扫描有一些默认规则,并且可以扩展规则。建议${D}尽可能使用这些 Yocto 默认路径,以便从 Yocto 的内置机制中受益。

${libdir}默认情况下,在 bitbake.conf 中定义为:默认情况${exec_prefix}/lib/usr/lib,在同一文件中定义。

install -d ${D}${libdir} 

最后这个“install”shell命令只是创建一个保存文件的目录(例如通过do_install),该目录最终应该安装在/usr/lib目标上。

${D}/a/b/cfor filec只是用于 Yocto 打包的中间路径,当同一文件位于目标文件系统上${D}时,它会被“切掉” 。c例如,${D}/a/b/c将在/a/b/c目标上。

${D}默认定义在狭隘/meta/conf/bitbake.conf作为:

TMPDIR = "${TOPDIR}/tmp"
BASE_WORKDIR ?= "${TMPDIR}/work"
WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
D = "${WORKDIR}/image"

相关内容