include vs require
- include FILE_PATH
- FILE_PATH에 명시시킨 파일을 추가하는 것을 시도한다.
- File이 Class일 경우도 상관 없다. (대신 inherit 과는 다르게 .bbclass 까지 다 적어야함)
- 기본적으로 현재 위치에 있는 파일을 찾는다.
- 상대 경로면, BBPATH 내에서 찾을 수 있는 첫 번째 것 포함
- 만약 위치를 include recipe-core/sam/sam.inc(.conf)라고 명시하면,
전체 메타 레이어에서 '이 위치'에 있는 sam.inc를 가져온다.
3.1. 같은 경로에 여러 메타데이터가 존재할 경우 최상위 메타레이어의 파일을 사용한다.
3.2. 특정 레이어 내의 파일을 포함하고 싶다면, 레이어 부터 Path 명시한다.
예: meta-mylayer/recipe-myrecipe/sam/sam.inc
- 두 개 이상의 레시피에서 코드를 공유하기 위해 보통 .inc 파일을 사용하는 것을 채택
- require FILE_PATH
- FILE_PATH에 명시시킨 파일을 추가하되, 파싱 못하면 Parese_Error
- 나머진 include와 똑같다.
local.conf
의 예
- poky를 기준으로 함
- ${TOPDIR}=${BUILDDIR}
- ${BUILDDIR}/conf/local.conf
여기서 include ${TOPDIR}/my-local.conf 로 추가
- ${TOPDIR}/my-local.conf
여기서 my_class.bbclass를 INHERIT += "my_class" 로 추가한다.
inherit
- 보통은 한 inherit은 레이어 내 classes 디렉토리 속의 'class_name'.bbclass 를 상속 받는데 사용된다.
- inherit 'class_name' 만 명시하면 된다.
- bbclass파일은 전역적으로 사용가능한 기능 구현을 할 때 주로 사용한다.
core-image-minimal.bb
의 예
- core-image-minimal.bb
inherit CLASS_NAME (.bbclass는 빼야함)
poky/layer/classes/core-image.bbclass
Structure
INHERIT
- 로컬로만 만들어 상속하고자 하면, 현재 ${BUILD_DIR}의
local.conf
와 같은 파일 등에서 INHERIT += "CLASS_NAME" 으로 추가
- 이 경우 또한, 이 빌드가 관리하는 메타-레이어들에서 classes내 있는 CLASS_NAME.bbclass 파일을 상속받는다.
- 여러 레이어 에 같은 이름의 'myclass.bbclass'가 존재할 때는, 저 특정 레이어의 클래스를 '콕' 찝어 오는 것은 불가하고, 가장 최상위 레이어의 가장 최상위 레이어의 bbclass를 가져온다.
- 본문의 링크가 그대로
INHERIT
을 사용하는 방법이다.
recipe의 우선순위, class의 우선순위
- .bbclass :
.conf
등 파일에서 INHERIT += "class_name"
으로 가져올 경우, 특정 레이어에서 콕 가져오진 못하고, 최상위 레이어에서 가져온다.
- recipe
- A 레이어 (priority: 10) / recipe_0.1.bb
- B 레이어 (priority: 5) / recipe_0.3.bb
- 과연 어떤 레시피가 사용될까? (별도 PREFERRED가 없을 시)
- 1순위: 레시피 버전
- 2순위: 레이어 우선순위
- B 레이어의 priority가 ↓↓ 도, recipe_version이 ↑↑라서, B 레이어/recipe_0.3.bb가 사용된다.
최상위 변수에 접근은 가능하지만 레시피끼리 공유는 불가능하다.
변수 설정 및 사용
- 예를 들어,
local.conf
에서 ENABLE_COMPILE
변수에 1
을 설정한다.
ENABLE_COMPILE = "1"
- 레시피에서 이를 활용한다.
d.getVar('ENABLE_COMPILE')
-> '1'