ในการสร้าง 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
ออกด้วยจะดีมาก