Starlarkにステートメントを含めて継承する

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の使用を削除することも理想的です。