android.mk中添加目录中所有cpp

android开发中,经常遇到需要在andoid.mk文件中包含特定的cpp文件(或c文件)

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

改为

# 遍历目录及子目录的函数
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)/%=%)

另有一例

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)/../*.cpp) 

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

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

加强版本(遍历所有文件,但是忽略某一个目录的文件),通过-prune可以指定忽略 "LogicLayer"这个目录

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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值