Android.mk - build all source file in a directory

老子叫甜甜 提交于 2019-11-30 13:27:28

The wildcard works for cocos2dx projects as well. I am using it on my own, just that your syntax is incorrect

Try:

HELLOCPP_FILES  := $(wildcard $(LOCAL_PATH)/hellocpp/*.cpp)
HELLOCPP_FILES  := $(HELLOCPP_FILES:$(LOCAL_PATH)/%=%)

CLASSES_FILES   := $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)
CLASSES_FILES   := $(CLASSES_FILES:$(LOCAL_PATH)/%=%)

LOCAL_SRC_FILES := $(HELLOCPP_FILES)
LOCAL_SRC_FILES += $(CLASSES_FILES)

Actually wildcards do work and you were on the right track...

This is an example of what works fine for me:

UTILITIES := $(wildcard $(LOCAL_PATH)/Utility/*.cpp)
ZIP := $(wildcard $(LOCAL_PATH)/Utility/zip/jni/*.c)

Notice the inclusion of the $(LOCAL_PATH) variable, and then

SOURCES := $(UTILITIES:$(LOCAL_PATH)/%=%)
SOURCES += $(ZIP:$(LOCAL_PATH)/%=%)

That should allow you to drop in any source file and it will compile without going back to the Android.mk file.

i think you don't need to add entire header for new added .cpp files .. you should just added it this way

for example . if you want to add this LaunchScreen.cpp then you should include it this simple way

LOCAL_SRC_FILES:=hellocpp/main.cpp \
          ../../Classes/myclass.cpp\
          ../../Classes/mynextclass.cpp\ 
          ../../Classes/LaunchScreen.cpp\

This is a makefile. Makefiles don't work like that. You can't specify an entire directory for files to compile- it just isn't set up that way. It's been like that for 40 years or so. One of many reasons why people hate makefiles. The problem is that all the replacements have been just as bad.

GaloisPlusPlus

To build all your .cpp files under ../../Classes/, you can use the external find command if you build your project on a UNIX-like OS:

SRC_PATH_CLASSES := $(shell find ../../Classes/ -type f)
SRC_PATH_CLASSES := $(filter %.cpp, $(SRC_PATH_CLASSES))
LOCAL_SRC_FILES += $(SRC_PATH_CLASSES:$(LOCAL_PATH)/%=%)

As suggested in the link: Recursive wildcards in GNU make?, another way is using the following recursive wildcard. It is written with pure Makefile rules, thus it is portable and better.

rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
SRC_PATH_CLASSES := $(call rwildcard, ../../Classes/, *.cpp)
LOCAL_SRC_FILES += $(SRC_PATH_CLASSES:$(LOCAL_PATH)/%=%)

After hours of fighting with this I found a solution that finally works with my cocos2dx setup (cocos2dx 3.10)

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

Answering here for the sake of helping someone out with the same pain since the -actually- works, this question still being relevant to this day Notably, this also works for Windows which was the main problem I experienced with other solutions

Source: http://qiita.com/YosukeMitsugi/items/137f1b57f03945ad2d50

this is what worked for me in cocos2dx 3.10 under win 10:

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

LOCAL_SRC_FILES := hellocpp/main.cpp \
LOCAL_SRC_FILES += $(FILE_LIST:$(LOCAL_PATH)/%=%)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!