Makefile 内のいくつかのフラグメントを抽出し、構文を説明します
例1
ifneq "" "$(filter eng.%,$(BUILD_NUMBER))"
# BUILD_NUMBER has a timestamp in it, which means that
# it will change every time. Pick a stable value.
FILE_NAME_TAG := eng.$(USER)
else
FILE_NAME_TAG := $(BUILD_NUMBER)
endif
上記の文ではそれぞれ「ifneq」、「filter」、「%」を使用していますが、
ifneqの
条件判定文とifeq
その逆、後者の2つのオブジェクトが等しくない場合に条件が成立する、
2つの判定対象について詳しく解説していきます。ここではそれぞれ「はい“”(空值)
」と「“$(filter eng.%,$(BUILD_NUMBER))”
filter
"$(filter eng.%,$(BUILD_NUMBER))" の場合、このステートメントは、Makefile のワイルドカードである変数から$(BUILD_NUMBER)
含まれる部分をフィルターで除外することを意味します。eng.%
%
例:
$(filter eng.%, "eng.123") の結果は "eng.123" です。
$(filter eng., "eng.123") の結果は "eng." です。
要約すると、この例の処理は、BUILD_NUMBER
変数が含まれているかどうかを判断することです。変数がeng.
含まれている場合、FILE_NAME_TAG には eng.$(USER) の値が割り当てられ、そうでない場合は、$(BUILD_NUMBER) の値が割り当てられます。
例2
ifneq ($(strip $(TARGET_NO_KERNEL)),true)
INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel
else
INSTALLED_KERNEL_TARGET :=
endif
キーワードストリップ开头
の機能は、スペースやタブ インデントなどの目に見えない文字を含む、オブジェクト内の空の文字を削除することです结尾
。
例:
$(strip " a bc ") の結果は「a bc」になります