2

假设我有一个像这样的文件结构:

/top_lib
    Android.mk
    /sub_lib1
        Android.mk
        __init__.py
        cheese_maker.py
/middle_lib/
    Android.mk
    /sub_lib2
        Android.mk
        __init__.py
        bread_baker.py
/another_lib
    Android.mk
    /sub_lib3
        Android.mk
        __init__.py
        leaf_raker.py

并在 top_lib/Android.mk 和 another_lib/Android/mk 和 middle_lib/Android.mk 中定义了一个 make 函数

define add-file
    include $$(PROJECT_DEFAULTS)
    LOCAL_MODULE := $(1)
    LOCAL_MODULE_TAGS := job_stuff
    LOCAL_MODULE_CLASS := ETC
    LOCAL_MODULE_PATH := $(DESTINATION_DIR)/job_stuff/$(strip $(2))
    LOCAL_SRC_FILES := $(1)
    include $$(PROJECT_PREBUILT)
endef

define add-files-to-job
    $(foreach f,$(2),$(eval $(call add-file,$f,$(1))))
endef

include $(call all-subdir-makefiles)

在每个 sub_lib/Android.mk 我有以下内容:

LOCAL_PATH := $(call my-dir)
FileList  := $(notdir $(wildcard $(LOCAL_PATH)/*.py))
DirName := $(notdir $(LOCAL_PATH:%/=%))

$(call add-files-to-job, $(DirName), $(FileList))

在另一个库中,如果我这样做,一切都很好。甚至在 middle_lib 或 top_lib 中。但是如果我在树的顶端,说运行 m job_stuff,最终我遇到了一个错误:

build/core/base_rules.mk:147 ** path/to/middle_lib: MODULE.TARGET.ETC.__init__.py already defined by path/to/top_lib Stop.

我想我明白发生了什么。它在 MODULE.TARGET.ETC 中暂存文件,并且具有相同名称的文件会引发错误。但我不知道如何解决它。我尝试更改LOCAL_MODULE := $(1)LOCAL_MODULE := $(2).$(1),这使得文件夹名称出现在每个文件名之前(例如:sub_lib1.cheese_maker.py),我想这就是我告诉它的。

我知道如果我将其更改LOCAL_MODULE_CLASS := ETC为其他任何内容,例如LOCAL_MODULE_CLASS := ETCA在其中一个 Android.mk 文件中,它将适用于该文件。但我似乎找不到太多关于LOCAL_MODULE_CLASS它以及如何使用它的文档,而且由于构建系统非常复杂,我不确定在所有地方创建新类的影响。

我还尝试更改从 add-file 添加的文件,使其更符合以下内容

LOCAL_PATH := $(call my-dir)
FileList  := $(notdir $(wildcard $(LOCAL_PATH)/*.py))
DirName := $(notdir $(LOCAL_PATH:%/=%))

include $$(PROJECT_DEFAULTS)
LOCAL_MODULE := $(DirName)
LOCAL_MODULE_TAGS := job_stuff
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(DESTINATION_DIR)/job_stuff/$(DirName)
LOCAL_SRC_FILES := $(FileList)
include $$(PROJECT_PREBUILT)

那就是说当我运行 mm 时它做了一些事情,但是在树的顶部 m job_stuff 什么也没做(嗯,它构建了很多东西但是 $(DESTINATION_DIR) 是空的)

所以我被困住了。如何在不同的库中有多个init .py 文件?

4

0 回答 0