いくつかのyoctレシピで次のインストールコマンドを見ました。
install -d ${D}${libdir}
installコマンドとその目的を知っていますが、$ {D}変数は通常レシピで定義されていないため、その目的を理解できません。誰かがこのシェル変数の目的を説明できますか?
答え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}
/usr/lib
この最後の「install」シェルコマンドは、ファイルを保持するディレクトリを作成し(たとえば、do_installを介して)、最終的にターゲットにインストールされます。
${D}/a/b/c
for fileはc
Yoctoパッケージングに使用される中間パスにすぎず、${D}
同じファイルがターゲットファイルシステムにあるときに「切断」されます。c
たとえば、目標${D}/a/b/c
になります/a/b/c
。
${D}
デフォルト値は以下に定義されています。ナロー/メタ/conf/bitbake.confように:
TMPDIR = "${TOPDIR}/tmp"
BASE_WORKDIR ?= "${TMPDIR}/work"
WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}"
D = "${WORKDIR}/image"