define all-cpp-files-under $(patsubst ./%,%, \ $(shell cd $(LOCAL_PATH) ; \ find $(1) -name "*.cpp" -and -not -name ".*" -and -not -name "CCEditBoxImplWindow.cpp") \ ) endef define all-subdir-cpp-files $(call all-cpp-files-under,.) endef LOCAL_SRC_FILES := $(call all-subdir-cpp-files)
使用这个方法可以遍历子目录所有.cpp文件,替换find的参数可以实现遍历和过滤任意文件。
Android.mk编写变得非常简洁和方便,无需再维护文件列表了。
另附一个更加简单的宏,可以实现遍历一个目录下的所有文件(但是不会递归调用)
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/../*.c)
FILE_LIST := $(wildcard $(LOCAL_PATH)/../*.cpp) LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
加强版本(遍历所有文件,但是忽略某一个目录的文件)
define all-cpp-files-under $(patsubst ./%,%, \ $(shell cd $(LOCAL_PATH) ; \ find $(1) -name LogicLayer -prune -o -name "*.cpp" -and -not -name ".*") \ ) endef通过-prune可以指定忽略 "LogicLayer"这个目录