설치 명령의 ${D} 변수

설치 명령의 ${D} 변수

여러 yocto 레시피에서 다음 설치 명령을 보았습니다.

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/cfor file은 cYocto 패키징에 사용되는 중간 경로일 뿐이며 ${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"

관련 정보