说我有这样的文件结构:
/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))
在another_lib中,如果我做mm,那一切都很好用。甚至在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
更改为其他任何内容,例如其中一个Android.mk文件中的LOCAL_MODULE_CLASS := ETCA
,它就会对该文件起作用。但我似乎无法在LOCAL_MODULE_CLASS
上找到很多文档以及如何利用它,而且由于构建系统非常复杂,我不确定在整个地方创建新类的影响。
我还尝试将添加文件的文件更改为更多
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时它确实有用,但是在树的顶部,job_stuff什么也没做(好吧,它构建了很多东西,但$(DESTINATION_DIR)是空的)
所以我被卡住了。如何在不同的库中使用多个 init .py文件?