具体的には、include
ステートメントには変数を持つファイルパスを含めることができます。接頭辞の前にマイナスを付けると存在しないファイルが無視されます。プロダクト構成では inherit-product-if-exists
関数がこれに相当します。Starlark は、文字列リテラルで識別されたファイルに load
ステートメントを使用します。ファイルが存在しない場合、Starlark はエラーをスローします。
この制限を回避するために、Starlark コンバータは次のことを行います。
- 変数を含むパスと一致するすべての Makefile を検索する
- 検索された 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
の使用も削除するのが理想的です。