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

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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) 

脚本宝典总结

以上是脚本宝典为你收集整理的android.mk中添加目录中所有cpp全部内容,希望文章能够帮你解决android.mk中添加目录中所有cpp所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。