makeでは、 include
ステートメントは変数を含むファイルパスをインクルードでき、マイナスのプレフィックスが付いている場合は存在しないファイルを無視します。同等の製品構成は、 inherit-product-if-exists
関数です。 Starlarkは、文字列リテラルで識別されるファイルでload
ステートメントを使用します。ファイルが存在しない場合、Starlarkはエラーをスローします。
この制限を回避するために、Starlarkコンバーターは次のことを行います。
- 変数を含むパスに一致する可能性のあるすべてのMakefileを検索します
- それらすべてに対してStarlark
load
ステートメントを発行します - 実行時に正しいものを選択します
生成されたStarlarkコードは、1つだけが実行される場合でも、一致するすべてのパスを一覧表示するため、不自然に見える場合があることに注意してください。
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
の使用を削除することも理想的です。