รวมและสืบทอดคำสั่งใน Starlark

ในการสร้าง include สั่ง include สามารถรวมพาธของไฟล์ที่มีตัวแปร และจะละเว้นไฟล์ที่ไม่มีอยู่เมื่อนำหน้าด้วยเครื่องหมายลบ เทียบเท่าการกำหนดค่าผลิตภัณฑ์คือฟังก์ชัน inherit-product-if-exists Starlark ใช้คำสั่ง load กับไฟล์ที่ระบุตามตัวอักษรของสตริง และหากไม่มีไฟล์อยู่ Starlark จะแสดงข้อผิดพลาด

ในการหลีกเลี่ยงข้อจำกัดนี้ ตัวแปลง Starlark:

  • ค้นหา Makefiles ทั้งหมดที่สามารถจับคู่เส้นทางที่เกี่ยวข้องกับตัวแปร
  • ปล่อยคำสั่ง load Starlark สำหรับพวกเขาทั้งหมด
  • เลือกอันที่ถูกต้องในขณะรันไทม์

โปรดทราบว่ารหัส Starlark ที่สร้างขึ้นอาจดูไม่เป็นธรรมชาติเนื่องจากแสดงรายการเส้นทางที่ตรงกันทั้งหมด แม้ว่าจะดำเนินการเพียงเส้นทางเดียวก็ตาม

เราขอแนะนำให้ลบการอ้างอิงตัวแปรในคำสั่ง include / inherit-product

เมื่อไม่สามารถหลีกเลี่ยงการอ้างอิงตัวแปรได้ ให้พยายามย่อส่วนของตัวแปรให้เล็กที่สุด ตัวอย่างเช่น:

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

ทำให้ตัวแปลงสร้างคำสั่ง load สำหรับแต่ละ file.mk ในแผนผังต้นทาง ในขณะที่

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

จำกัด ไว้ที่ไฟล์ file.mk ภายใต้ path/to แน่นอนว่า การลบการใช้งาน TARGET_PRODUCT ออกด้วยจะดีมาก