Starlark의 포함 및 상속 구문

make에서 include 문은 변수를 사용하는 파일 경로를 포함할 수 있으며, 빼기 기호가 접두사로 지정된 경우 존재하지 않는 파일은 무시합니다. 제품 구성은 inherit-product-if-exists 기능과 동일합니다. Starlark는 문자열 리터럴로 식별된 파일과 함께 load 문을 사용하며, 파일이 존재하지 않으면 오류가 발생합니다.

이 제한을 해결하기 위해 Starlark 변환기는 다음을 실행합니다.

  • 변수가 포함된 경로와 일치할 수 있는 모든 Makefile 찾기
  • 모든 Makefile에서 Starlark load 문 내보내기
  • 런타임 시 정확한 Makefile 선택하기

생성된 Starlark 코드는 하나만 실행하더라도 일치하는 모든 경로를 나열하므로 부자연스럽게 보일 수 있습니다.

include/inherit-product 문에서는 변수 참조를 삭제하는 것이 좋습니다.

변수 참조를 피할 수 없는 경우 변수 부분을 최소화해 보세요. 예:

MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk

변환기는 소스 트리의 file.mk마다 load 문을 생성하지만,

include path/to/$(TARGET_PRODUCT)/file.mk

path/to 아래의 file.mk 파일로 제한됩니다. 물론, TARGET_PRODUCT 사용도 없애는 것이 좋습니다.