$D variable in install command

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












6














I have seen the following install command used in multiple yocto recipes



install -d $D$libdir


I am aware of the install command and its purpose, however I am unable to understand the purpose of $D variable as it is often nowhere defined in the recipe. Can somebody explain the purpose of this shell variable?










share|improve this question























  • Check out the OpenEmbedded User Manual D: The destination directory.
    – meuh
    Jan 23 '17 at 12:44















6














I have seen the following install command used in multiple yocto recipes



install -d $D$libdir


I am aware of the install command and its purpose, however I am unable to understand the purpose of $D variable as it is often nowhere defined in the recipe. Can somebody explain the purpose of this shell variable?










share|improve this question























  • Check out the OpenEmbedded User Manual D: The destination directory.
    – meuh
    Jan 23 '17 at 12:44













6












6








6


0





I have seen the following install command used in multiple yocto recipes



install -d $D$libdir


I am aware of the install command and its purpose, however I am unable to understand the purpose of $D variable as it is often nowhere defined in the recipe. Can somebody explain the purpose of this shell variable?










share|improve this question















I have seen the following install command used in multiple yocto recipes



install -d $D$libdir


I am aware of the install command and its purpose, however I am unable to understand the purpose of $D variable as it is often nowhere defined in the recipe. Can somebody explain the purpose of this shell variable?







compiling yocto






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 24 '17 at 23:07









Gilles

527k12710561580




527k12710561580










asked Jan 23 '17 at 8:14









shery6405

3314




3314











  • Check out the OpenEmbedded User Manual D: The destination directory.
    – meuh
    Jan 23 '17 at 12:44
















  • Check out the OpenEmbedded User Manual D: The destination directory.
    – meuh
    Jan 23 '17 at 12:44















Check out the OpenEmbedded User Manual D: The destination directory.
– meuh
Jan 23 '17 at 12:44




Check out the OpenEmbedded User Manual D: The destination directory.
– meuh
Jan 23 '17 at 12:44










2 Answers
2






active

oldest

votes


















6














The $D variable allows the software being built to be installed in a directory other than its real target. For example, you might configure the software so that libdir is /usr/lib, but that's for the target device; when you run the installation on your build system, you don't want the newly-built files to actually be installed in /usr/lib, you want the placed somewhere isolated so that they can be readily identified and copied across to the target system. So you create a temporary directory and install there:



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


That way the files end up in /tmp/yocto-target/usr/lib and so on. You can then archive all of /tmp/yocto-target using whatever tool you prefer, dropping the /tmp/yocto-target prefix, copy the archive to the target device and install its contents there.



In other build systems, the DESTDIR variable is used for the same reason.






share|improve this answer






















  • Does installing package in $D$libdir copy the output to package DESTDIR or to rootfs foder in /tmp/work.../rootfs ?
    – ransh
    Nov 10 '17 at 15:24










  • Umm... I’m not sure what you’re asking; installing in $D$libdir installs in whatever directory the D and libdir variables point to. DESTDIR is used in other build systems, not Yocto’s.
    – Stephen Kitt
    Nov 10 '17 at 16:09










  • The answer explains the "purpose" of $D, but as the OP wrote "it is often nowhere defined in the recipe". It still remains a mystery where its value comes from. E.g. I have a template recipe generated by the petalinux-create command which references $D but there is no "include" or any other clue as to where the $D is defined.
    – 2.718
    Dec 11 '17 at 22:04







  • 1




    @2.718 it’s not defined because it’s up to the user to specify its value, as indicated in my example: make install D=/tmp/yocto-target will install to a set of directories rooted in /tmp/yocto-target. If no value is given, the installation is done in /.
    – Stephen Kitt
    Dec 11 '17 at 22:08











  • @Stephen Kitt thanks for the clarification. It is not obvious to a newcomer who has not written BB recipes before and is only looking at them to understand how it all hangs together.
    – 2.718
    Dec 14 '17 at 21:09



















0














$D is the usual top of the path used by a Yocto recipe where the recipe installs files that belong to packages produced by this recipe. These directories under $D are scanned by the build system for files to include into packages (like RPM files) and to be included in the so-called sysroot tree where files (e.g. libraries and headers) go that are used by other packages. There are some default rules for this scan and the rules can be expanded.
It is recommended to use these Yocto default paths under $D as much as possible to benefit from the built-in mechanisms of Yocto.



$libdir is defined in bitbake.conf by default as: $exec_prefix/lib which is /usr/lib by default, defined in the same file.



install -d $D$libdir 


In the end this "install" shell command just creates a directory where files are to be saved (e.g. by do_install) that should finally be installed under /usr/lib on the target.



$D/a/b/c for file c is just the intermediate path used for Yocto packaging and $D is "cut away" when the same file c is on the target filesystem.
So for instance $D/a/b/c will be at /a/b/c on the target.



$D is defined by default in poky/meta/conf/bitbake.conf as:



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





share|improve this answer






















  • I'm not familiar with yocto; does this D variable come into play, given Stephen's answer?
    – Jeff Schaller
    Dec 11 at 16:09










Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f339463%2fd-variable-in-install-command%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









6














The $D variable allows the software being built to be installed in a directory other than its real target. For example, you might configure the software so that libdir is /usr/lib, but that's for the target device; when you run the installation on your build system, you don't want the newly-built files to actually be installed in /usr/lib, you want the placed somewhere isolated so that they can be readily identified and copied across to the target system. So you create a temporary directory and install there:



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


That way the files end up in /tmp/yocto-target/usr/lib and so on. You can then archive all of /tmp/yocto-target using whatever tool you prefer, dropping the /tmp/yocto-target prefix, copy the archive to the target device and install its contents there.



In other build systems, the DESTDIR variable is used for the same reason.






share|improve this answer






















  • Does installing package in $D$libdir copy the output to package DESTDIR or to rootfs foder in /tmp/work.../rootfs ?
    – ransh
    Nov 10 '17 at 15:24










  • Umm... I’m not sure what you’re asking; installing in $D$libdir installs in whatever directory the D and libdir variables point to. DESTDIR is used in other build systems, not Yocto’s.
    – Stephen Kitt
    Nov 10 '17 at 16:09










  • The answer explains the "purpose" of $D, but as the OP wrote "it is often nowhere defined in the recipe". It still remains a mystery where its value comes from. E.g. I have a template recipe generated by the petalinux-create command which references $D but there is no "include" or any other clue as to where the $D is defined.
    – 2.718
    Dec 11 '17 at 22:04







  • 1




    @2.718 it’s not defined because it’s up to the user to specify its value, as indicated in my example: make install D=/tmp/yocto-target will install to a set of directories rooted in /tmp/yocto-target. If no value is given, the installation is done in /.
    – Stephen Kitt
    Dec 11 '17 at 22:08











  • @Stephen Kitt thanks for the clarification. It is not obvious to a newcomer who has not written BB recipes before and is only looking at them to understand how it all hangs together.
    – 2.718
    Dec 14 '17 at 21:09
















6














The $D variable allows the software being built to be installed in a directory other than its real target. For example, you might configure the software so that libdir is /usr/lib, but that's for the target device; when you run the installation on your build system, you don't want the newly-built files to actually be installed in /usr/lib, you want the placed somewhere isolated so that they can be readily identified and copied across to the target system. So you create a temporary directory and install there:



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


That way the files end up in /tmp/yocto-target/usr/lib and so on. You can then archive all of /tmp/yocto-target using whatever tool you prefer, dropping the /tmp/yocto-target prefix, copy the archive to the target device and install its contents there.



In other build systems, the DESTDIR variable is used for the same reason.






share|improve this answer






















  • Does installing package in $D$libdir copy the output to package DESTDIR or to rootfs foder in /tmp/work.../rootfs ?
    – ransh
    Nov 10 '17 at 15:24










  • Umm... I’m not sure what you’re asking; installing in $D$libdir installs in whatever directory the D and libdir variables point to. DESTDIR is used in other build systems, not Yocto’s.
    – Stephen Kitt
    Nov 10 '17 at 16:09










  • The answer explains the "purpose" of $D, but as the OP wrote "it is often nowhere defined in the recipe". It still remains a mystery where its value comes from. E.g. I have a template recipe generated by the petalinux-create command which references $D but there is no "include" or any other clue as to where the $D is defined.
    – 2.718
    Dec 11 '17 at 22:04







  • 1




    @2.718 it’s not defined because it’s up to the user to specify its value, as indicated in my example: make install D=/tmp/yocto-target will install to a set of directories rooted in /tmp/yocto-target. If no value is given, the installation is done in /.
    – Stephen Kitt
    Dec 11 '17 at 22:08











  • @Stephen Kitt thanks for the clarification. It is not obvious to a newcomer who has not written BB recipes before and is only looking at them to understand how it all hangs together.
    – 2.718
    Dec 14 '17 at 21:09














6












6








6






The $D variable allows the software being built to be installed in a directory other than its real target. For example, you might configure the software so that libdir is /usr/lib, but that's for the target device; when you run the installation on your build system, you don't want the newly-built files to actually be installed in /usr/lib, you want the placed somewhere isolated so that they can be readily identified and copied across to the target system. So you create a temporary directory and install there:



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


That way the files end up in /tmp/yocto-target/usr/lib and so on. You can then archive all of /tmp/yocto-target using whatever tool you prefer, dropping the /tmp/yocto-target prefix, copy the archive to the target device and install its contents there.



In other build systems, the DESTDIR variable is used for the same reason.






share|improve this answer














The $D variable allows the software being built to be installed in a directory other than its real target. For example, you might configure the software so that libdir is /usr/lib, but that's for the target device; when you run the installation on your build system, you don't want the newly-built files to actually be installed in /usr/lib, you want the placed somewhere isolated so that they can be readily identified and copied across to the target system. So you create a temporary directory and install there:



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


That way the files end up in /tmp/yocto-target/usr/lib and so on. You can then archive all of /tmp/yocto-target using whatever tool you prefer, dropping the /tmp/yocto-target prefix, copy the archive to the target device and install its contents there.



In other build systems, the DESTDIR variable is used for the same reason.







share|improve this answer














share|improve this answer



share|improve this answer








edited Jan 23 '17 at 8:47

























answered Jan 23 '17 at 8:19









Stephen Kitt

163k24362440




163k24362440











  • Does installing package in $D$libdir copy the output to package DESTDIR or to rootfs foder in /tmp/work.../rootfs ?
    – ransh
    Nov 10 '17 at 15:24










  • Umm... I’m not sure what you’re asking; installing in $D$libdir installs in whatever directory the D and libdir variables point to. DESTDIR is used in other build systems, not Yocto’s.
    – Stephen Kitt
    Nov 10 '17 at 16:09










  • The answer explains the "purpose" of $D, but as the OP wrote "it is often nowhere defined in the recipe". It still remains a mystery where its value comes from. E.g. I have a template recipe generated by the petalinux-create command which references $D but there is no "include" or any other clue as to where the $D is defined.
    – 2.718
    Dec 11 '17 at 22:04







  • 1




    @2.718 it’s not defined because it’s up to the user to specify its value, as indicated in my example: make install D=/tmp/yocto-target will install to a set of directories rooted in /tmp/yocto-target. If no value is given, the installation is done in /.
    – Stephen Kitt
    Dec 11 '17 at 22:08











  • @Stephen Kitt thanks for the clarification. It is not obvious to a newcomer who has not written BB recipes before and is only looking at them to understand how it all hangs together.
    – 2.718
    Dec 14 '17 at 21:09

















  • Does installing package in $D$libdir copy the output to package DESTDIR or to rootfs foder in /tmp/work.../rootfs ?
    – ransh
    Nov 10 '17 at 15:24










  • Umm... I’m not sure what you’re asking; installing in $D$libdir installs in whatever directory the D and libdir variables point to. DESTDIR is used in other build systems, not Yocto’s.
    – Stephen Kitt
    Nov 10 '17 at 16:09










  • The answer explains the "purpose" of $D, but as the OP wrote "it is often nowhere defined in the recipe". It still remains a mystery where its value comes from. E.g. I have a template recipe generated by the petalinux-create command which references $D but there is no "include" or any other clue as to where the $D is defined.
    – 2.718
    Dec 11 '17 at 22:04







  • 1




    @2.718 it’s not defined because it’s up to the user to specify its value, as indicated in my example: make install D=/tmp/yocto-target will install to a set of directories rooted in /tmp/yocto-target. If no value is given, the installation is done in /.
    – Stephen Kitt
    Dec 11 '17 at 22:08











  • @Stephen Kitt thanks for the clarification. It is not obvious to a newcomer who has not written BB recipes before and is only looking at them to understand how it all hangs together.
    – 2.718
    Dec 14 '17 at 21:09
















Does installing package in $D$libdir copy the output to package DESTDIR or to rootfs foder in /tmp/work.../rootfs ?
– ransh
Nov 10 '17 at 15:24




Does installing package in $D$libdir copy the output to package DESTDIR or to rootfs foder in /tmp/work.../rootfs ?
– ransh
Nov 10 '17 at 15:24












Umm... I’m not sure what you’re asking; installing in $D$libdir installs in whatever directory the D and libdir variables point to. DESTDIR is used in other build systems, not Yocto’s.
– Stephen Kitt
Nov 10 '17 at 16:09




Umm... I’m not sure what you’re asking; installing in $D$libdir installs in whatever directory the D and libdir variables point to. DESTDIR is used in other build systems, not Yocto’s.
– Stephen Kitt
Nov 10 '17 at 16:09












The answer explains the "purpose" of $D, but as the OP wrote "it is often nowhere defined in the recipe". It still remains a mystery where its value comes from. E.g. I have a template recipe generated by the petalinux-create command which references $D but there is no "include" or any other clue as to where the $D is defined.
– 2.718
Dec 11 '17 at 22:04





The answer explains the "purpose" of $D, but as the OP wrote "it is often nowhere defined in the recipe". It still remains a mystery where its value comes from. E.g. I have a template recipe generated by the petalinux-create command which references $D but there is no "include" or any other clue as to where the $D is defined.
– 2.718
Dec 11 '17 at 22:04





1




1




@2.718 it’s not defined because it’s up to the user to specify its value, as indicated in my example: make install D=/tmp/yocto-target will install to a set of directories rooted in /tmp/yocto-target. If no value is given, the installation is done in /.
– Stephen Kitt
Dec 11 '17 at 22:08





@2.718 it’s not defined because it’s up to the user to specify its value, as indicated in my example: make install D=/tmp/yocto-target will install to a set of directories rooted in /tmp/yocto-target. If no value is given, the installation is done in /.
– Stephen Kitt
Dec 11 '17 at 22:08













@Stephen Kitt thanks for the clarification. It is not obvious to a newcomer who has not written BB recipes before and is only looking at them to understand how it all hangs together.
– 2.718
Dec 14 '17 at 21:09





@Stephen Kitt thanks for the clarification. It is not obvious to a newcomer who has not written BB recipes before and is only looking at them to understand how it all hangs together.
– 2.718
Dec 14 '17 at 21:09














0














$D is the usual top of the path used by a Yocto recipe where the recipe installs files that belong to packages produced by this recipe. These directories under $D are scanned by the build system for files to include into packages (like RPM files) and to be included in the so-called sysroot tree where files (e.g. libraries and headers) go that are used by other packages. There are some default rules for this scan and the rules can be expanded.
It is recommended to use these Yocto default paths under $D as much as possible to benefit from the built-in mechanisms of Yocto.



$libdir is defined in bitbake.conf by default as: $exec_prefix/lib which is /usr/lib by default, defined in the same file.



install -d $D$libdir 


In the end this "install" shell command just creates a directory where files are to be saved (e.g. by do_install) that should finally be installed under /usr/lib on the target.



$D/a/b/c for file c is just the intermediate path used for Yocto packaging and $D is "cut away" when the same file c is on the target filesystem.
So for instance $D/a/b/c will be at /a/b/c on the target.



$D is defined by default in poky/meta/conf/bitbake.conf as:



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





share|improve this answer






















  • I'm not familiar with yocto; does this D variable come into play, given Stephen's answer?
    – Jeff Schaller
    Dec 11 at 16:09















0














$D is the usual top of the path used by a Yocto recipe where the recipe installs files that belong to packages produced by this recipe. These directories under $D are scanned by the build system for files to include into packages (like RPM files) and to be included in the so-called sysroot tree where files (e.g. libraries and headers) go that are used by other packages. There are some default rules for this scan and the rules can be expanded.
It is recommended to use these Yocto default paths under $D as much as possible to benefit from the built-in mechanisms of Yocto.



$libdir is defined in bitbake.conf by default as: $exec_prefix/lib which is /usr/lib by default, defined in the same file.



install -d $D$libdir 


In the end this "install" shell command just creates a directory where files are to be saved (e.g. by do_install) that should finally be installed under /usr/lib on the target.



$D/a/b/c for file c is just the intermediate path used for Yocto packaging and $D is "cut away" when the same file c is on the target filesystem.
So for instance $D/a/b/c will be at /a/b/c on the target.



$D is defined by default in poky/meta/conf/bitbake.conf as:



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





share|improve this answer






















  • I'm not familiar with yocto; does this D variable come into play, given Stephen's answer?
    – Jeff Schaller
    Dec 11 at 16:09













0












0








0






$D is the usual top of the path used by a Yocto recipe where the recipe installs files that belong to packages produced by this recipe. These directories under $D are scanned by the build system for files to include into packages (like RPM files) and to be included in the so-called sysroot tree where files (e.g. libraries and headers) go that are used by other packages. There are some default rules for this scan and the rules can be expanded.
It is recommended to use these Yocto default paths under $D as much as possible to benefit from the built-in mechanisms of Yocto.



$libdir is defined in bitbake.conf by default as: $exec_prefix/lib which is /usr/lib by default, defined in the same file.



install -d $D$libdir 


In the end this "install" shell command just creates a directory where files are to be saved (e.g. by do_install) that should finally be installed under /usr/lib on the target.



$D/a/b/c for file c is just the intermediate path used for Yocto packaging and $D is "cut away" when the same file c is on the target filesystem.
So for instance $D/a/b/c will be at /a/b/c on the target.



$D is defined by default in poky/meta/conf/bitbake.conf as:



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





share|improve this answer














$D is the usual top of the path used by a Yocto recipe where the recipe installs files that belong to packages produced by this recipe. These directories under $D are scanned by the build system for files to include into packages (like RPM files) and to be included in the so-called sysroot tree where files (e.g. libraries and headers) go that are used by other packages. There are some default rules for this scan and the rules can be expanded.
It is recommended to use these Yocto default paths under $D as much as possible to benefit from the built-in mechanisms of Yocto.



$libdir is defined in bitbake.conf by default as: $exec_prefix/lib which is /usr/lib by default, defined in the same file.



install -d $D$libdir 


In the end this "install" shell command just creates a directory where files are to be saved (e.g. by do_install) that should finally be installed under /usr/lib on the target.



$D/a/b/c for file c is just the intermediate path used for Yocto packaging and $D is "cut away" when the same file c is on the target filesystem.
So for instance $D/a/b/c will be at /a/b/c on the target.



$D is defined by default in poky/meta/conf/bitbake.conf as:



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






share|improve this answer














share|improve this answer



share|improve this answer








edited 8 hours ago

























answered Dec 11 at 14:54









crayor

111




111











  • I'm not familiar with yocto; does this D variable come into play, given Stephen's answer?
    – Jeff Schaller
    Dec 11 at 16:09
















  • I'm not familiar with yocto; does this D variable come into play, given Stephen's answer?
    – Jeff Schaller
    Dec 11 at 16:09















I'm not familiar with yocto; does this D variable come into play, given Stephen's answer?
– Jeff Schaller
Dec 11 at 16:09




I'm not familiar with yocto; does this D variable come into play, given Stephen's answer?
– Jeff Schaller
Dec 11 at 16:09

















draft saved

draft discarded
















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f339463%2fd-variable-in-install-command%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown






Popular posts from this blog

Peggy Mitchell

Palaiologos

The Forum (Inglewood, California)