web-dev-qa-db-fra.com

Android.mk, inclure tous les fichiers cpp

J'essaie de construire un projet Android en utilisant le ndk, mais j'ai rencontré des problèmes.

Voici le fichier Android.mk qui fonctionne:

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)

Existe-t-il un moyen qui me permette de spécifier tous les fichiers * .cpp dans le répertoire, sans les répertorier manuellement sous LOCAL_SRC_FILES?

Jusqu'à présent, j'ai essayé d'utiliser LOCAL_SRC_FILES = $ (caractère générique * .cpp), mais cela fonctionnait maintenant, il semble qu'aucun fichier ne soit sélectionné.

48
gq3

Vous pouvez essayer quelque chose comme ça ...

FILE_LIST := $(wildcard $(LOCAL_PATH)/[DIRECTORY]/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

... Changement [DIRECTORY] vers le répertoire réel des fichiers. S'ils se trouvent dans le même répertoire que votre .mk fichier puis supprimez cette partie. Créez le FILE_LIST variable pour trouver tous les .cpp fichiers sous [DIRECTORY] répertoire. Ensuite, utilisez-le dans la liste des fichiers. Le LOCAL_SRC_FILES la ligne supprimera alors le LOCAL_PATH de la liste.

71
DRiFTy

J'utilise ce script pour mon Android.mk m'a fait gagner beaucoup de temps!

#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)/%=%)

Ici est l'essentiel

21
NiTe Luo

Et comme ça:

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

Si vous auriez peur que l'extension de * contienne $ (LOCAL_PATH) /, cela pourrait être OK:

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