次の2つの理由から、製品/ボード構成で新しいmake関数を定義しないでください。
- この関数が後で
Android.mk
ファイルで使用された場合、製品構成がStarlarkに変換されたときに関数が定義されなくなり、Android.mk
ファイルが意図したとおりに機能しない可能性があります。 - MakefileからStarlarkへのコンバーターは、一度に1つのファイルのみを参照し、関数定義は、呼び出された場所とは異なるファイルにあることがよくあります。
make関数は、実際には組み込みの$(call)
関数を使用して評価される単なる変数ですが、Make to Starlarkコンバーターは、 define
キーワードで定義された変数が関数定義であると想定し、それを拒否します。したがって、関数は次のようになります。
define my-func
Some text, arg1: $(1)
enddef
$(call my-func,foo)
いくつかの一般的な関数をコアビルドシステムのMakefileで定義されている関数に自動的に置き換えるスクリプトを提供しています。それらはbuild / bazel / mk2rbcにあります。