次のinstallコマンドが複数のyoctoレシピで使用されているのを見ました
install -d ${D}${libdir}
Installコマンドとその目的を知っていますが、$ {D}変数の目的がレシピで定義されていないことが多いため、目的を理解できません。誰かがこのシェル変数の目的を説明できますか?
${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
変数が同じ理由で使用されます。
_${D}
_は、Yoctoレシピによって使用されるパスの通常の先頭であり、レシピは、このレシピによって生成されたパッケージに属するファイルをインストールします。 _${D}
_の下のこれらのディレクトリは、パッケージ(RPMファイルなど)に含めるファイル、および他のユーザーが使用するファイル(ライブラリやヘッダーなど)が入るいわゆるsysrootツリーに含まれるファイルについて、ビルドシステムによってスキャンされます。パッケージ。このスキャンにはデフォルトのルールがいくつかあり、ルールは拡張できます。 Yoctoの組み込みメカニズムを活用するには、これらのYoctoのデフォルトパスを_${D}
_の下でできるだけ使用することをお勧めします。
_${libdir}
_は、デフォルトではbitbake.confで次のように定義されています。_${exec_prefix}/lib
_これは、デフォルトで_/usr/lib
_であり、同じファイルで定義されています。
_install -d ${D}${libdir}
_
最後に、この「インストール」シェルコマンドは、ターゲットの_/usr/lib
_に最終的にインストールする必要があるファイルを(たとえば、do_installによって)保存するディレクトリを作成するだけです。
ファイルc
の_${D}/a/b/c
_は、Yoctoパッケージに使用される中間パスに過ぎず、同じファイルc
がターゲットファイルシステムにある場合、_${D}
_は「切り取られます」。したがって、たとえば、_${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"
_