2011-01-03 18 views
16

Kompiluję natywne źródła i dodam zależności z .a libs i tymi względnymi plikami nagłówkowymi o następującej strukturze.Brak reguły dla celu 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 zadzwonić podfolderach pliki mk

/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

pliki cel. (.h)

Ale podczas próby ndk-build (NDK5) otrzymałem następujący błąd.

[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. 

Podczas wpisywania Zauważyłem błąd jest o /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”, co się dzieje w moim tworzyć pliki?

Problem można by uniknąć poprzez zmianę pierwszego Android.mk na następujące kwestie:

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) 

Ale wygląda źle. Czy istnieje lepsze podejście?

Odpowiedz

33

Z Dokumentów w NDK 5, rozwiązaniem jest utworzenie zmiennej lokalnej ..

moja-dir Zwraca ścieżkę ostatni zawarte Makefile, który zwykle jest bieżący katalog Android.mk użytkownika. Funkcja ta jest przydatna do określenia LOCAL_PATH na początku swojej Android.mk jak z:

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. 

Więc .. rozwiązać ten problem mogę zmienić Android.mk się poniżej.

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) 

I jego prace.

+0

"Nie wywołuj mojego katalogu po dodaniu innego pliku". linia zaoszczędziła dużo czasu. Dzięki. – Sanket

0

Myślę, że to prawda, aby usunąć lokalną ścieżkę po włączeniu sub plik_plików.

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) 

Wygląda nieprawidłowo. Myślę, że możesz po prostu spróbować:

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) 

Mam nadzieję, że pomoże.

+0

Myliłem się ... ((((( – busylee

+0

Nie możesz tego zrobić, ponieważ "mój-dir" Zwraca ścieżkę ostatniego dołączonego pliku Makefile, który zwykle jest bieżącym katalogiem systemu Android.mk.To jest przydatne do zdefiniowania LOCAL_PATH na początku twój Android.mk jak z: " –

Powiązane problemy