Bao gồm và kế thừa các câu lệnh trong Starlark

Trong thực hiện, một câu lệnh include có thể bao gồm các đường dẫn tệp có biến và sẽ bỏ qua các tệp không tồn tại khi có tiền tố là dấu trừ. Tương đương với cấu hình sản phẩm là hàm inherit-product-if-exists . Starlark sử dụng câu lệnh load với các tệp được xác định bằng chuỗi ký tự và nếu tệp không tồn tại, Starlark sẽ báo lỗi.

Để khắc phục hạn chế này, bộ chuyển đổi Starlark:

  • tìm tất cả Makefiles có thể khớp với đường dẫn liên quan đến các biến
  • phát ra câu lệnh load Starlark cho tất cả chúng
  • chọn đúng trong thời gian chạy

Lưu ý rằng mã Starlark được tạo có thể trông không tự nhiên vì nó liệt kê tất cả các đường dẫn phù hợp mặc dù chỉ một đường dẫn sẽ được thực thi.

Chúng tôi khuyên bạn nên loại bỏ các tham chiếu biến trong các câu lệnh include / inherit-product .

Khi không thể tránh tham chiếu biến, hãy cố gắng giảm thiểu phần biến. Ví dụ:

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

khiến trình chuyển đổi tạo câu lệnh load cho từng file.mk trong cây nguồn, trong khi

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

giới hạn nó ở các tệp file.mk trong path/to . Tất nhiên, lý tưởng nhất là loại bỏ việc sử dụng TARGET_PRODUCT .