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é.
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.
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
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))