2011-01-03 22 views
16

Sto compilando le origini native e aggiungendo le dipendenze con .una lib e quei relativi file di intestazione con la seguente struttura.Nessuna regola per rendere la destinazione NDK

/jni/

Android.mk

LOCAL_PATH := $(call my-dir) 
include $(call all-subdir-makefiles) 

include $(CLEAR_VARS) 

LOCAL_LDLIBS := -llog 
LOCAL_MODULE := ndk1 
LOCAL_SRC_FILES := native.c 
LOCAL_STATIC_LIBRARY := mschema 
include $(BUILD_SHARED_LIBRARY) 

native.c

/jni/prereqs/

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(call all-subdir-makefiles) 

include $(CLEAR_VARS) 

--Used chiamare i file mk sottocartelle

/jni/prereqs/MSchema/

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE :=mschema 
LOCAL_SRC_FILES :=libmschema.a 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 

include $(PREBUILT_STATIC_LIBRARY) 

libmschema.a

/jni/prereqs/MSchema/include

file di intestazione. (.h)

Ma durante il tentativo di ndk-build (NDK5) ho ricevuto il seguente errore.

[email protected]:~/dev/workspace/rmsdk.native.wraper$ ndk-buildmake: 
*** No rule to make target `/home/marcos/dev/workspace/rmsdk.native.wraper/jni/prereqs/mschema/native.c', needed by `/home/marcos/dev/workspace/rmsdk.native.wraper/obj/local/armeabi/objs/ndk1/native.o'. Stop. 

durante la digitazione ho notato l'errore è di circa /home/marcos/dev/workspace/rmsdk.native.wraper/jni/prereqs/mschema/native.c' and actually this file is under /home/marcos/dev/workspace/rmsdk.native.wraper/jni/native.c', cosa c'è di sbagliato nei miei file make?

Il problema potrebbero essere evitati modificando la prima Android.mk al seguente:

LOCAL_PATH := $(call my-dir) 
include $(call all-subdir-makefiles) 
LOCAL_PATH :=/home/marcos/dev/workspace/rmsdk.native.wraper/jni 
include $(CLEAR_VARS) 
LOCAL_LDLIBS := -llog 
LOCAL_MODULE := ndk1 
LOCAL_SRC_FILES := native.c 
LOCAL_STATIC_LIBRARY := mschema 
include $(BUILD_SHARED_LIBRARY) 

Ma sembra sbagliato. C'è un approccio migliore?

risposta

33

Dalla documentazione in NDK 5, la soluzione è quella di creare una variabile locale ..

my-dir Restituisce il percorso dell'ultimo incluso Makefile, che in genere è la directory corrente del Android.mk. Questo è utile per definire local_path all'inizio del vostro Android.mk come con:

LOCAL_PATH := $(call my-dir) 

IMPORTANT NOTE: Due to the way GNU Make works, this really returns 
the path of the *last* *included* *Makefile* during the parsing of 
build scripts. Do not call my-dir after including another file. 

Quindi .. per risolvere questo problema a cambiare il mio Android.mk a quanto segue.

LOCAL_PATH := $(call my-dir) 
MY_PATH := $(LOCAL_PATH) 
include $(call all-subdir-makefiles) 

include $(CLEAR_VARS) 

LOCAL_PATH := $(MY_PATH) 

LOCAL_LDLIBS := -llog -ldl 
LOCAL_MODULE := rmsdk 
LOCAL_SRC_FILES := native.c 

include $(BUILD_SHARED_LIBRARY) 

E le sue opere.

+0

"Non chiamare my-dir dopo aver incluso un altro file". linea salvato un sacco di tempo. Grazie. – Sanket

0

Penso che sia vero per def percorso locale dopo aver incluso subfile file.

LOCAL_PATH := $(call my-dir) 
MY_PATH := $(LOCAL_PATH) 
include $(call all-subdir-makefiles) 

include $(CLEAR_VARS) 

LOCAL_PATH := $(MY_PATH) 

LOCAL_LDLIBS := -llog -ldl 
LOCAL_MODULE := rmsdk 
LOCAL_SRC_FILES := native.c 

include $(BUILD_SHARED_LIBRARY) 

Sembra sbagliato. Penso che puoi provare questo:

include $(call all-subdir-makefiles) 

include $(CLEAR_VARS) 

LOCAL_PATH := $(call my-dir) 

LOCAL_LDLIBS := -llog -ldl 
LOCAL_MODULE := rmsdk 
LOCAL_SRC_FILES := native.c 

include $(BUILD_SHARED_LIBRARY) 

Spero che sia d'aiuto.

+0

Ho sbagliato ... ((((( – busylee

+0

Non puoi fare ciò causa "my-dir Restituisce il percorso dell'ultimo Makefile incluso, che in genere è la directory corrente di Android.mk.È utile per definire LOCAL_PATH all'inizio di il tuo Android.mk come con: " –

Problemi correlati