Starlark のインクルード ステートメントと継承ステートメント

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

具体的には、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 の使用も削除するのが理想的です。