Ich habe den folgenden Installationsbefehl gesehen, der in mehreren Yocto-Rezepten verwendet wird
install -d ${D}${libdir}
Ich kenne den Installationsbefehl und seinen Zweck, kann jedoch den Zweck der Variablen $ {D} nicht verstehen, da er im Rezept häufig nirgends definiert ist. Kann jemand den Zweck dieser Shell-Variablen erklären?
Antworten:
Mit der
${D}
Variablen kann die zu erstellende Software in einem anderen Verzeichnis als dem eigentlichen Ziel installiert werden. Beispielsweise können Sie die Software so konfigurieren, dass dies der Falllibdir
ist/usr/lib
, dies gilt jedoch für das Zielgerät. Wenn Sie die Installation auf Ihrem Build-System ausführen, möchten Sie nicht, dass die neu erstellten Dateien tatsächlich installiert/usr/lib
werden. Sie möchten, dass die Dateien an einem isolierten Ort abgelegt werden, damit sie leicht identifiziert und auf das Zielsystem kopiert werden können. Sie erstellen also ein temporäres Verzeichnis und installieren es dort:Auf diese Weise landen die Dateien in
/tmp/yocto-target/usr/lib
und so weiter. Sie können dann alle/tmp/yocto-target
mit einem beliebigen Tool archivieren , das/tmp/yocto-target
Präfix löschen, das Archiv auf das Zielgerät kopieren und dessen Inhalt dort installieren.In anderen Build-Systemen wird die
DESTDIR
Variable aus demselben Grund verwendet.quelle
${D}${libdir}
installiert in jedem Verzeichnis, auf das die VariablenD
undlibdir
verweisen.DESTDIR
wird in anderen Build-Systemen verwendet, nicht in Yoctos.make install D=/tmp/yocto-target
Wird in einer Reihe von Verzeichnissen installiert, in denen verwurzelt ist/tmp/yocto-target
. Wenn kein Wert angegeben wird, erfolgt die Installation in/
.${D}
ist der übliche Anfang des Pfads, der von einem Yocto-Rezept verwendet wird, in dem das Rezept Dateien installiert, die zu Paketen gehören, die von diesem Rezept erstellt wurden. Diese Verzeichnisse unter${D}
werden vom Build-System nach Dateien durchsucht, die in Pakete (wie RPM-Dateien) aufgenommen und in den sogenannten Sysroot-Baum aufgenommen werden sollen, in den Dateien (z. B. Bibliotheken und Header) verschoben werden, die von anderen Paketen verwendet werden. Es gibt einige Standardregeln für diesen Scan und die Regeln können erweitert werden. Es wird empfohlen, diese Yocto-Standardpfade${D}
so weit wie möglich zu verwenden, um von den integrierten Mechanismen von Yocto zu profitieren.${libdir}
ist in bitbake.conf standardmäßig definiert als: Dies${exec_prefix}/lib
ist/usr/lib
standardmäßig in derselben Datei definiert.Am Ende erstellt dieser Shell-Befehl "install" nur ein Verzeichnis, in dem Dateien gespeichert werden sollen (z. B. von do_install), die schließlich unter
/usr/lib
auf dem Ziel installiert werden sollen .${D}/a/b/c
for-Dateic
ist nur der Zwischenpfad, der für das Yocto-Packaging verwendet wird, und${D}
wird "weggeschnitten", wenn sich dieselbe Dateic
im Zieldateisystem befindet. So zum Beispiel${D}/a/b/c
wird auf seine/a/b/c
auf dem Ziel.${D}
ist in poky / meta / conf / bitbake.conf standardmäßig definiert als:quelle
D
Variable angesichts von Stephens Antwort ins Spiel ?