Android.mk, включает все файлы cpp
Я пытаюсь создать проект Android с помощью ndk, но я столкнулся с некоторыми проблемами.
Здесь файл Android.mk, который работает:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_CFLAGS := -Werror
LOCAL_SRC_FILES := main.cpp, Screen.cpp, ScreenManager.cpp
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
Есть ли способ, который позволяет мне указывать все *.cpp файлы в каталоге, без указания их вручную в LOCAL_SRC_FILES?
До сих пор я пытался использовать LOCAL_SRC_FILES = $(wildcard *.cpp), но теперь он работал, кажется, что файлы не выбраны.
Ответы
Ответ 1
Вы можете попробовать что-то вроде этого...
FILE_LIST := $(wildcard $(LOCAL_PATH)/[DIRECTORY]/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
... Измените [DIRECTORY]
на фактический каталог файлов. Если они находятся в том же каталоге, что и ваш файл .mk
, тогда удалите эту часть. Создайте переменную FILE_LIST
, чтобы найти все файлы .cpp
в каталоге [DIRECTORY]
. Затем используйте его в списке файлов. После этого строка LOCAL_SRC_FILES
удалит LOCAL_PATH
из списка.
Ответ 2
Я использую этот script для моего Android.mk, так много времени спасал!
#traverse all the directory and subdirectory
define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef
#find all the file recursively under jni/
ALLFILES = $(call walk, $(LOCAL_PATH))
FILE_LIST := $(filter %.cpp, $(ALLFILES))
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
Здесь является суть
Ответ 3
Как об этом:
LOCAL_SRC_FILES := $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.cpp))
Если вы опасаетесь, что расширение * содержит $(LOCAL_PATH)/, это может быть ОК:
LOCAL_SRC_FILES := $(subst $(LOCAL_PATH)/./,,$(wildcard $(LOCAL_PATH)/./*.cpp))