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í:
- Botones Back y Home presionan evento para dispositivos Android (cocos2d-x 3)
- Env-> FindClass función devuelve null
- Android NDK: Cómo manejar Volver presionar tecla en Cocos2dx?
- Reproducir vídeo en la parte superior de la vista de OpenGL en android
- Mientras ejecuta COCOS2D para Android FATAL EXCEPTION: main
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!
- Adición de archivos cpp al proyecto cocos2d-x project android
- SimpleJSON C ++ Class no puede analizar cadenas en Android (NDK) pero la misma clase funciona en cualquier otra plataforma
- Cocos2d-x android no puede resolver la biblioteca coscos2dx
- ABORTO: HEAP MEMORY CORRUPTION en NDK env. (Biblioteca POCO, Sqlite3, Cocos2dx)
- Redimensionamiento automático en cocos2dx
- Error en la creación del proyecto cocos2d-x android: atributo de objeto EABI desconocido 44
- Error al ejecutar HelloWorld cocos2dx
- Cómo mostrar Cuadro de diálogo de un método estático
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)/%=%)