Starlark에서 명령문 포함 및 상속

make에서 include 문은 변수가 있는 파일 경로를 포함할 수 있으며 마이너스 접두사가 붙으면 존재하지 않는 파일을 무시합니다. 제품 구성에 해당하는 것은 inherit-product-if-exists 기능입니다. Starlark는 문자열 리터럴로 식별되는 파일과 함께 load 문을 사용하며 파일이 없으면 Starlark에서 오류가 발생합니다.

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

  • 변수가 포함된 경로와 일치할 수 있는 모든 Makefile을 찾습니다.
  • 그들 모두에 대해 Starlark load 문을 내보냅니다.
  • 런타임에 올바른 것을 선택합니다.

생성된 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 의 사용을 제거하는 것도 이상적입니다.