Android.mk: crea todo el archivo fuente en un directorio

Estoy usando Android NDK para construir mi proyecto cocos2dx, dentro de Android.mk, hay una definición de LOCAL_SRC_FILES donde se enumeran cada uno de los archivos cpp. Cada vez que he añadido un nuevo archivo de origen, tendría que añadir allí también … se ve así:

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

El archivo de encabezado, sin embargo, puede especificar el directorio completo para incluir, se ve así:

 LOCAL_C_INCLUDES := $(LOCAL_PATH)/hellocpp LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/Screens 

He intentado varias maneras de incluir el directorio entero en vez del solo archivo para el LOCAL_SRC_FILES modo que no necesite modificar el script de la estructura de Android.mk cada vez que agrego un nuevo archivo, sin embargo, hasta ahora todos mis intentos fallaron.

He intentado esto:

 #SRC_PATH_HELLOCPP := $(wildcard hellocpp/*.cpp) #SRC_PATH_CLASSES += $(wildcard ../../Classes/*.cpp) #LOCAL_SRC_FILES := $(SRC_PATH_HELLOCPP:$(LOCAL_PATH/%=%) #LOCAL_SRC_FILES += $(SRC_PATH_CLASSES:$(LOCAL_PATH/%=%) 

tan bien como esto:

 #LOCAL_SRC_FILES += hellocpp/*.cpp #LOCAL_SRC_FILES += ../../Classes/*.cpp 

Ambos no funcionan

Tengo otro proyecto que funciona bien con la primera opción, sin embargo, realmente no entiendo por qué no funciona en el proyecto cocos2dx … ¿Alguien sabe por qué o conoce la solución? O tal vez debería dejarlo como está y tomar la molestia, ya que todo el mundo está haciendo eso., Pero es realmente problemático, espero que alguien puede ayudar para que todos nosotros podamos ser más productivos ..

¡Gracias!

El comodín también funciona para los proyectos cocos2dx. Lo estoy usando por mi cuenta, sólo que su sintaxis es incorrecta

Tratar:

 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) 

En realidad los comodines funcionan y estabas en el camino correcto …

Este es un ejemplo de lo que funciona bien para mí:

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

Observe la inclusión de la variable $ (LOCAL_PATH) y, a continuación,

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

Eso debería permitirte caer en cualquier archivo fuente y se compilará sin volver al archivo Android.mk.

Creo que no es necesario agregar el encabezado entero para los nuevos archivos .cpp añadido. Sólo debe agregarlo de esta manera

por ejemplo . Si desea agregar este LaunchScreen.cpp, entonces debe incluirlo de esta manera sencilla

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

Este es un makefile. Makefiles no funcionan así. No se puede especificar un directorio completo para los archivos a compilar, simplemente no está configurado de esa manera. Ha sido así por 40 años o así. Una de las muchas razones por las que la gente odia los makefiles. El problema es que todos los reemplazos han sido igual de malos.

Para construir todos sus archivos .cpp bajo ../../Classes/ , puede utilizar el comando find externo si crea su proyecto en un sistema operativo tipo UNIX:

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

Como se sugiere en el enlace: comodines recursivos en GNU hacer? , Otra forma es usar el siguiente comodín recursivo. Está escrito con reglas puras de Makefile, así que es portable y mejor.

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

Después de horas de pelear con esto encontré una solución que finalmente funciona con mi configuración de cocos2dx (cocos2dx 3.10)

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

Responder aquí por el bien de ayudar a alguien con el mismo dolor desde el-en realidad-funciona, esta pregunta sigue siendo relevante para este día Notablemente, esto también funciona para Windows que fue el principal problema que experimenté con otras soluciones

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

Esto es lo que funcionó para mí en cocos2dx 3.10 bajo ganar 10:

 FILE_LIST := $(wildcard $(LOCAL_PATH)/../../../Classes/*.cpp) LOCAL_SRC_FILES := hellocpp/main.cpp \ LOCAL_SRC_FILES += $(FILE_LIST:$(LOCAL_PATH)/%=%) 
  • cómo prueba de dispositivo de Android 2.3.5 ¿dónde está la opción de desarrollador?
  • Cocos2d-xv 2.0.4 FATAL EXCEPTION GLThread cuando se ejecuta en el emulador de Android
  • Cocos2d-x se bloquea cuando se ingresa en el fondo
  • Recibí un error de complición _GLIBCXX_PERMIT_BACKWARD_HASH en android NDK al usar hash_map
  • Adición de cocos2d-x a un proyecto Android existente
  • Error al abrir el archivo de caché de shader libEGL
  • Compilación de la aplicación android utilizando boost, referencia indefinida a 'mbtowc'
  • TDD para Cocos2d-X en android
  • Cocos2d-x: ¿es posible usar HTML (UIWebView)?
  • Cocos2d-x-2.1.4: error: formato no es una cadena literal y no hay argumentos de formato
  • Cocos2dxGLSurfaceView no se puede resolver en un tipo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.