android.mk中添加目錄中全部cpp

android開發中,常常遇到須要在andoid.mk文件中包含特定的cpp文件(或c文件)android

LOCAL_SRC_FILES := hellocpp/main.cpp \
    ../../Classes/AppDelegate.cpp \
    ../../Classes/ClipingNodeLayer.cpp\
    ../../Classes/MainScene.cpp\
    ../../Classes/MenuTab.cpp

改成c++

# 遍歷目錄及子目錄的函數
define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef

# 遍歷Classes目錄
ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)
FILE_LIST := hellocpp/main.cpp
# 從全部文件中提取出全部.cpp文件
FILE_LIST += $(filter %.cpp, $(ALLFILES))

LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

另有一例shell

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編寫變得很是簡潔和方便,無需再維護文件列表了。函數

另附一個更加簡單的宏,能夠實現遍歷一個目錄下的全部文件(可是不會遞歸調用)code

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

經過wildcard能夠進行文件遍歷,若是是單目錄結構,經過這個一樣能夠達到很是簡潔的效果。若是是c++代碼的話(*.cpp文件),須要使用下面的方式,不然可能找不到文件:遞歸

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

增強版本(遍歷全部文件,可是忽略某一個目錄的文件),經過-prune能夠指定忽略 "LogicLayer"這個目錄ip

define all-cpp-files-under  
  $(patsubst ./%,%, \  
     $(shell cd $(LOCAL_PATH) ; \  
          find $(1) -name LogicLayer -prune -o -name "*.cpp" -and -not -name ".*") \  
  )  
endef 

LOCAL_SRC_FILES := $(call all-subdir-cpp-files)
相關文章
相關標籤/搜索