make'te, bir include
ifadesi, değişkenleri olan dosya yollarını içerebilir ve önüne bir eksi eklendiğinde var olmayan dosyaları yok sayar. Ürün konfigürasyon eşdeğeri inherit-product-if-exists
işlevidir. Starlark, dizge hazır değeri tarafından tanımlanan dosyalarla load
deyimlerini kullanır ve bir dosya yoksa, Starlark bir hata atar.
Bu sınırlamayı aşmak için Starlark dönüştürücü:
- değişkenleri içeren yolla eşleşebilecek tüm Makefile dosyalarını bulur
- hepsi için Starlark
load
bildirimleri yayar - çalışma zamanında doğru olanı seçer
Oluşturulan Starlark kodunun, yalnızca biri yürütülecek olsa bile eşleşen tüm yolları listelediğinden doğal görünmeyebileceğini unutmayın.
include
/ inherit-product
ifadelerindeki değişken referanslarını kaldırmanızı öneririz.
Değişken referanslarından kaçınılamadığı zaman, değişken kısmı en aza indirmeye çalışın. Örneğin:
MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk
dönüştürücünün kaynak ağaçtaki her file.mk
için bir load
ifadesi oluşturmasına neden olurken,
include path/to/$(TARGET_PRODUCT)/file.mk
path/to
altındaki file.mk
dosyalarıyla sınırlandırır. Elbette TARGET_PRODUCT
kullanımının da kaldırılması ideal olacaktır.