2011-01-03 27 views
16

Tôi đang biên soạn các nguồn gốc và thêm các phụ thuộc với .a libs và các tệp tiêu đề tương đối có cấu trúc sau.Không có quy tắc nào để đặt mục tiêu 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 để gọi các thư mục con mk file

/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 Header. (.h)

Nhưng trong khi cố gắng để ndk-build (NDK5) tôi nhận được lỗi sau.

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

Trong khi gõ tôi ghi nhận lỗi về /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', có gì sai trong thực hiện tác phẩm của tôi?

Vấn đề có thể tránh được bằng cách thay đổi Android.mk đầu tiên như sau:

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) 

Nhưng có vẻ sai. Có cách tiếp cận tốt hơn không?

Trả lời

33

Từ Documents trong NDK 5, giải pháp là để tạo ra một biến địa phương ..

my-dir Trả về đường dẫn của cuối cùng bao gồm Makefile, mà thường là thư mục hiện hành Android.mk của. Đây là hữu ích để xác định LOCAL_PATH vào đầu Android.mk của bạn như với:

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. 

Vì vậy .. để giải quyết vấn đề này, tôi thay đổi Android.mk của tôi như sau.

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) 

Và các công trình của nó.

+0

"Không gọi my-dir sau khi bao gồm một tệp khác". dòng đã lưu rất nhiều thời gian. Cảm ơn. – Sanket

0

Tôi nghĩ rằng nó là đúng để def đường dẫn địa phương sau khi bao gồm cả makefiles phụ.

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) 

Có vẻ như sai. Tôi nghĩ bạn chỉ có thể thử điều này:

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) 

Hy vọng điều đó sẽ hữu ích.

+0

Tôi đã sai ... (((( – busylee

+0

Bạn không thể làm điều đó gây ra "my-dir Trả về đường dẫn của Makefile cuối cùng, thường là thư mục Android.mk hiện tại. Điều này rất hữu ích để xác định LOCAL_PATH khi bắt đầu Android.mk của bạn như với: " –

Các vấn đề liên quan