Android.mk, включите все файлы cpp - PullRequest
48 голосов
/ 24 января 2012

Я пытаюсь создать проект 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 = $ (подстановочный знак * .cpp), но теперь он работал, кажется, что ни один файл не выбран.

Ответы [ 3 ]

70 голосов
/ 24 января 2012

Вы можете попробовать что-то вроде этого ...

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 из списка.

20 голосов
/ 01 мая 2013

Я использовал этот скрипт для своего 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 голосов
/ 07 мая 2013

Примерно так:

LOCAL_SRC_FILES := $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.cpp))

Если вы боитесь, что расширение * содержит $ (LOCAL_PATH) /, возможно, все в порядке:

LOCAL_SRC_FILES := $(subst $(LOCAL_PATH)/./,,$(wildcard $(LOCAL_PATH)/./*.cpp))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...