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
사용도 없애는 것이 좋습니다.