Android.mk遍历子目录所有文件

Android.mk遍历子目录所有文件

  1.  
    define all-cpp-files-under
  2.  
    $(patsubst ./%,%, \
  3.  
    $(shell cd $(LOCAL_PATH) ; \
  4.  
    find $(1) -name "*.cpp" -and -not -name ".*" -and -not -name "CCEditBoxImplWindow.cpp") \
  5.  
    )
  6.  
    endef
  7.  
     
  8.  
    define all-subdir-cpp-files
  9.  
    $(call all-cpp-files-under,.)
  10.  
    endef
  11.  
     
  12.  
    LOCAL_SRC_FILES := $(call all-subdir-cpp-files)

使用这个方法可以遍历子目录所有.cpp文件,替换find的参数可以实现遍历和过滤任意文件。

Android.mk编写变得非常简洁和方便,无需再维护文件列表了。

另附一个更加简单的宏,可以实现遍历一个目录下的所有文件(但是不会递归调用)

 

LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/../*.c)

通过wildcard可以进行文件遍历,如果是单目录结构,通过这个同样可以达到非常简洁的效果。如果是c++代码的话(*.cpp文件),需要使用下面的方式,否则可能找不到文件:

 

 

  1.  
    FILE_LIST := $(wildcard $(LOCAL_PATH)/../*.cpp)
  2.  
    LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

 

加强版本(遍历所有文件,但是忽略某一个目录的文件)

 

  1.  
    define all-cpp-files-under
  2.  
    $(patsubst ./%,%, \
  3.  
    $(shell cd $(LOCAL_PATH) ; \
  4.  
    find $(1) -name LogicLayer -prune -o -name "*.cpp" -and -not -name ".*") \
  5.  
    )
  6.  
    endef
通过-prune可以指定忽略 "LogicLayer"这个目录

posted on 2019-08-14 09:51  Maddock  阅读(900)  评论(0编辑  收藏  举报

导航