我正在查看Android开源项目的Makefile,并且看到似乎有两种不同的方法来包含另一个Makefile。例如,master/build/target/product/aosp_arm64.mk
文件中有以下这些行:
PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.ethernet.xml:system/etc/permissions/android.hardware.ethernet.xml
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/board/generic_arm64/device.mk)
include $(SRC_TARGET_DIR)/product/emulator.mk
PRODUCT_NAME := aosp_arm64
PRODUCT_DEVICE := generic_arm64
PRODUCT_BRAND := Android
PRODUCT_MODEL := AOSP on ARM arm64 Emulator
$(call inherit-product ...)
和 include ...
之间的区别是什么?
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
不是包含另一个makefile的方法。它是调用用户定义的make函数(https://www.gnu.org/software/make/manual/html_node/Call-Function.html)`inherit-product`,并带有参数`$(SRC_TARGET_DIR)/product/core_64_bit.mk`。要了解该函数的作用,您需要搜索其定义。 - Mike Kinghan