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

发布于:2022-12-25 ⋅ 阅读:(772) ⋅ 点赞:(0)

https://blog.csdn.net/qq_35624156/article/details/78721425?utm_term=android.mk%E6%B7%BB%E5%8A%A0%E6%96%87%E4%BB%B6%E5%A4%B9&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-5-78721425-null-null&spm=3001.4430

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)


网站公告

今日签到

点亮在社区的每一天
去签到